【发布时间】:2017-06-24 16:46:44
【问题描述】:
给你一个大小为 N 的列表,用零初始化。您必须对列表执行 M 操作并输出列表中所有 N 个元素的最终值的最大值。对于每个操作,您都会获得三个整数 a、b 和 k,并且您必须为从 index 到(包括两者)的所有元素添加值。
输入格式
第一行将包含两个整数 N 和 M,由一个空格分隔。 接下来的 M 行将包含三个整数 a、b 和 k,由一个空格分隔。 列表中的数字从 1 到 N 编号。
输出格式
更新列表中包含最大值的单行。
示例输入
5 3
1 2 100
2 5 100
3 4 100
样本输出
200
说明
第一次更新后列表将是 100 100 0 0 0。
第二次更新后列表将是 100 200 100 100 100。
第三次更新后列表将是 100 200 200 200 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)
有人可以解释上述解决方案吗?
【问题讨论】:
-
这是一个活跃的编程竞赛吗?
-
不。这是hackerrank的练习题。
标签: python algorithm performance