Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 理解数组行为的算法_Python_Algorithm_Performance - Fatal编程技术网

Python 理解数组行为的算法

Python 理解数组行为的算法,python,algorithm,performance,Python,Algorithm,Performance,给您一个大小为N的列表,初始化为零。您必须对列表执行M个操作,并输出列表中所有N个元素的最大最终值。对于每个操作,您都会得到三个整数a、b和k,并且您必须为从索引到(两者都包括)的所有元素添加值 输入格式 第一行将包含两个整数N和M,由一个空格分隔。 接下来的M行将包含由单个空格分隔的三个整数a、b和k。 列表中的数字从1到N进行编号 约束条件 输出格式 包含更新列表中最大值的单行 样本输入 5.3 12100 25100 3400 样本输出 二百 解释 第一次更新后,列表将为100。 第二次

给您一个大小为N的列表,初始化为零。您必须对列表执行M个操作,并输出列表中所有N个元素的最大最终值。对于每个操作,您都会得到三个整数a、b和k,并且您必须为从索引到(两者都包括)的所有元素添加值

输入格式

第一行将包含两个整数N和M,由一个空格分隔。 接下来的M行将包含由单个空格分隔的三个整数a、b和k。 列表中的数字从1到N进行编号

约束条件

输出格式

包含更新列表中最大值的单行

样本输入

5.3
12100
25100
3400

样本输出

二百

解释
第一次更新后,列表将为100。
第二次更新后,列表将为100。
第三次更新后,列表将为100。
所以要求的答案是200

时间复杂度较低的解决方案之一

n, inputs = [int(n) for n in input().split(" ")]
list = [0]*(n+1)
for _ in range(inputs):
    x, y, incr = [int(n) for n in input().split(" ")]
    list[x-1] += incr
    if((y)<=len(list)): 
        list[y] -= incr
max = x = 0
for i in list:
    x=x+i;
    if(max<x):max=x
print(max)
n,input=[int(n)表示input()中的n。拆分(“”)
列表=[0]*(n+1)
对于范围内的(输入):
x、 y,incr=[int(n)表示输入()中的n。拆分(“”)
列表[x-1]+=增量

如果((y)基本上它存储的是增量而不是最终列表;这意味着每个操作只需要2次读写,而不是(b-a+1)。那么最终的
max
扫描会在进行时添加增量,这仍然是一个
O(n)
操作,您无论如何都必须这样做

n, inputs = [int(n) for n in input().split(" ")]
获取列表大小(n)和操作数(m),即
5
3

list = [0]*(n+1)
创建一个0填充的空列表。应该是
lst=[0]*n
(不要将
list
用作变量名,它会隐藏内置类型)(我们不需要额外的结束单元格,除非在算法上用作校验和-如果它工作正常,最终校验和应该是0)

获取操作(a、b、k),即
1
2
100

    list[x-1] += incr
将增量添加到起始单元格

    if((y)<=len(list)): 
        list[y] -= incr
x
现在是当前列表单元格的实际值。
max
是一个糟糕的变量名,因为它隐藏了内置的
max()
函数

    if(max<x):max=x

显示结果。

这是一场活跃的编程竞赛吗?不是。这是hackerrank的练习题。
max = x = 0
for i in list:
    x=x+i;
    if(max<x):max=x
print(max)