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