Arrays Hackerrank阵列操作辅助

Arrays Hackerrank阵列操作辅助,arrays,python-3.x,Arrays,Python 3.x,这与hackerrank上的“操纵数组”问题有关: 你能解释一下为什么这段代码从queries数组的第二个元素中减去,以及它是如何将最后的数字相加的吗。我添加了打印语句,以了解为什么这样做有效,但我被卡住了 def arrayManipulation(n, queries): arr = [0]*n for i in queries: arr[i[0] - 1] += i[2] if i[1] != len(arr): ar

这与hackerrank上的“操纵数组”问题有关:

你能解释一下为什么这段代码从queries数组的第二个元素中减去,以及它是如何将最后的数字相加的吗。我添加了打印语句,以了解为什么这样做有效,但我被卡住了

def arrayManipulation(n, queries):
    arr = [0]*n
    for i in queries:
        arr[i[0] - 1] += i[2]
        if i[1] != len(arr):
            arr[i[1]] -= i[2]
    maxval = 0
    itt = 0
    for q in arr:
        itt += q
        if itt > maxval:
            maxval = itt
    return maxval

将值添加到范围的第一个元素,并从范围的最后一个元素后的元素中减去,而不是将值添加到范围中的每个元素。这样,当从一开始迭代数组并对所有值求和时,就会得到每个元素的当前值。例如,n==5:

0 0 0 0 0

query 1 3 100

100 0 0 -100 0

query 2 4 200

100 200 0 -100 -200
如果您现在迭代数组并在执行此操作时对值求和,您将得到以下值:

1003002000

这是此类查询后数组的正确状态


编辑:对于结束索引等于数组长度的查询,不会从任何值中减去该值,因为在最后一个之后没有元素,所以这样做没有意义。

Oh!我看到数组现在正在求和。有没有一些数学概念导致了这个解决方案?所以只改变范围中的第一个/最后一个元素只是减少了操作的数量?非常感谢你的帮助!漫长的一天,我应该看到,它只是被总结在最后。我只是不明白这个答案是什么conceptualized@TrevorScanlan这就是所谓的a,它是一个著名的编程数据结构真棒!非常感谢。