Hackerrank 上的数组操作

问题描述

我的代码有什么问题?它只通过了我的 6 个测试用例,我确信我犯了一些错误,但我无法弄清楚。另外,如果有人能帮助我理解这段代码的空间和时间复杂度,我将不胜感激。谢谢。

def arrayManipulation(n,queries):
    arr = [0]*(n+2)
    for q in queries:
        print(q)
        a = q[0]
        b = q[1]
        k = q[-1]
        arr[a] += k
        arr[b+1] -= k
        print(arr)
      
    max_sum = temp =  0
    for i in arr:
        print(i)
        temp += i
        print("TEMP:",temp)
        max_sum = max(max_sum,temp)
        print("MAXSUM:",max_sum)
    return max_sum
    
if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'],'w')
    nm = input().split()
    n = int(nm[0])
    m = int(nm[1])
    queries = []
    for _ in range(m):
        queries.append(list(map(int,input().rstrip().split())))
    result = arrayManipulation(n,queries)
    fptr.write(str(result) + '\n')
    fptr.close()

解决方法

问题出在您代码的以下部分:

    max_sum = temp =  0
for i in arr:
    print(i)
    temp += i
    print("TEMP:",temp)
    max_sum = max(max_sum,temp)
    print("MAXSUM:",max_sum)
return max_sum

max_sum 和 temp 都是整数类型,在溢出前最多只能处理 2147483647 的数字。但是问题指定 k 在 0 到 10^9 的范围内,当这些数字加起来时,它很容易溢出。尝试使用 long 而不是 int。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...