python - 数组操作 | Hackerrank 运行时错误问题
问题描述
我正在从hackerrank做这个数组操作问题,它告诉我运行时错误。从我的角度来看,时间复杂度是 O(n)。但它仍然遇到了这个问题。任何人都可以帮助我吗?
以下是链接:
从 1 索引的零数组和操作列表开始,为每个操作添加一个值到两个给定索引之间的每个数组元素,包括两个给定索引。执行完所有操作后,返回数组中的最大值。
例如,您的 zeros 数组的长度。您的查询列表如下:
a b k 1 5 3 4 8 7 6 9 1
在索引和包容之间添加 的值:
index -> 1 2 3 4 5 6 7 8 9 10 [0,0,0, 0, 0,0,0,0,0, 0] [3,3,3, 3, 3,0,0,0,0, 0] [3,3,3,10,10,7,7,7,0, 0] [3,3,3,10,10,8,8,8,1, 0]
最大值是在执行了所有操作之后。
我在这里附上了我的代码:
def arrayManipulation(n,queries):
increment=[]
value=[]
for i in range(n):
increment+=[0]
value+=[0]
for j in range(m):
left=queries[j][0]
right=queries[j][1]
k=queries[j][2]
increment[left-1]+=k
if right>=n:
continue
else:
increment[right]-=k
value[0]=increment[0]
for i in range(1,n):
value[i]=value[i-1]+increment[i]
maximum=max(value)
return maximum
解决方案
如果您只是在正确的索引处添加/减去,您可以简化这个问题 - 所以您只有 2 个操作而不是 2000 个操作
1 2000 3
您的查询列表如下:
a b k
1 5 3
4 8 7
6 9 1
# demonstation purposes, do not create list with 200k zero entries - use a dict. see below.
[+3, 0, 0, 0, -3, 0, 0, 0, 0, 0] # 2 index ops by 1 5 3
[+3, 0, 0, +7, -3, 0, 0, -7, 0, 0] # 2 index ops by 4 8 7
[+3, 0, 0, +7, -3, +1, 0, -7,-1, 0] # 2 index ops by 6 9 1
# sums:
3 3 3 10 7 8 8 1 0 0 # for loop through list, adding all, remembering max
您可以通过一次通过整个列表来获得最大值,然后在通过时简单地将所有数字相加 + 记住最大值。
这简化了破坏内存/计算时间的大型列表的整个问题。
而不是这样做(对于 200k 长列表)
1 2000 3 # 2000 times change value
11 2000 3 # 2000 times change value
21 2000 3 # 2000 times change value
31 2000 3 # 2000 times change value
41 2000 3 # 2000 times change value
你做了 10 次价值改变:
# demonstation purposes, do not create list with 200k zero entries - use a dict. see below.
[ ..., +3, ..., +3, ..., +3, ..., +3, ..., +3, ............,
-3, ..., -3, ..., -3, ..., -3, ..., -3, ...]
{1:3, 11:3, 21:3, 31:3, 41:3, 2001:-3, 2011:-3, 2021:-3, 2031:-3, 2041:-3}
并在按键排序并添加您得到的值时:
3, 6, 9, 12, 15, 18, 15, 13, 12, 9, 6, 3
您应该能够将这些内容插入到带有 key == position 的 dict 中(如果多次出现,请确保更新键的值而不是替换它:
3 7 3
3 9 3
3 5 3
{3:9,7:-3, 9:-3, 5:-3} # 3 updated several times
弄清楚这些想法使一些hackerranks变得有趣(尽管很多只是不好/不清楚)。
这是代码,玩得开心-复制和粘贴解决方案并不是什么成就-这就是为什么我一开始没有编写代码的原因...
maxElem, inputs = [int(n) for n in input().split(" ")]
d = {}
for _ in range(inputs):
x, y, incr = [int(n) for n in input().split(" ")]
d.setdefault(x,0)
d[x]=d[x]+incr
if(y <= maxElem+2):
d.setdefault(y+1,0)
d[y+1]=d[y+1]-incr
maxx = 0
x= 0
for i in sorted(d):
x+=d[i]
if(maxx<x):
maxx=x
print(maxx)
推荐阅读
- javascript - 在嵌套列表中过滤嵌套列表
- json - 从 React 中的 JSON 数组中分离选择下拉列表中的值
- javascript - 如何在带有if条件的for循环的junit测试用例中增加分支覆盖率?
- reactjs - 为应用程序的不同部分做出反应路由,例如用户的普通应用程序和管理员的仪表板
- java - 在 Spring Boot 应用程序中使用 JPA 查询或本机 sql 查询进行多行更新
- linux - 如何在不解压缩的情况下获取 zip 中所有文件的 md5sum
- excel - 将文本框内容保存为图像文件
- python - Python 为什么 Django 不让我加载新产品?
- python - 当我将 lambda 函数保存在数组中并按位置调用它们时,它总是调用最后一个函数?
- apache-spark - 如何避免连接中的键列名称重复?