【发布时间】:2019-12-14 04:27:09
【问题描述】:
问题来了:
https://www.hackerrank.com/challenges/equal-stacks/problem
由于超时,我收到终止错误! 请帮帮我。
算法说明:
第一步。
获取 3 个数组并将它们反转,从现有数组中创建一个新数组,其中每个元素是所有先前元素的总和。例如:[3,2,1,1,1] -> [1,1,1,2,3] -> [1,2,3,5,8] 所以形成的 3 个新数组将是 [1,2,3,5,8] [2,5,9] [1,5,6,7]
第二步。
再次反转数组 [8,5,3,2,1] [9,5,2] [7,6,5,1]
第三步。
取最小数组,即 [9,5,2] 遍历最小数组并在其他 2 个数组中搜索元素 - 如果该元素存在于其他 2 个数组中,则停止并返回数字。 例如。在这里,我从 elem - 9 开始:在其他 2 个数组中不存在。接下来我从 elem - 5 开始:它存在于其他 2 个数组中。 因此答案是 5。
import os
import sys
def equalStacks(h1, h2, h3):
new_h1=[]
new_h2=[]
new_h3=[]
h1=list(reversed(h1))
h2=list(reversed(h2))
h3=list(reversed(h3))
new_h1.append(h1[0])
new_h2.append(h2[0])
new_h3.append(h3[0])
bol=False
ans=-1
for i in range(len(h1)-1):
new_h1.append(new_h1[i]+h1[i+1])
for i in range(len(h2)-1):
new_h2.append(new_h2[i]+h2[i+1])
for i in range(len(h3)-1):
new_h3.append(new_h3[i]+h3[i+1])
low=min([n1,n2,n3])
if low==n1:
for i in list(reversed(new_h1)):
if (i in list(reversed(new_h2))) and (i in list(reversed(new_h3))):
bol=True
ans=i
break
else:
pass
elif low==n2:
for i in list(reversed(new_h2)):
if (i in list(reversed(new_h1))) and (i in list(reversed(new_h3))):
bol=True
ans=i
break
else:
pass
else:
for i in list(reversed(new_h2)):
if (i in list(reversed(new_h1))) and (i in list(reversed(new_h3))):
bol=True
ans=i
break
else:
pass
if bol==True:
return(print(i))
else:
return(print(0))
if __name__ == '__main__':
n1N2N3 = input().split()
n1 = int(n1N2N3[0])
n2 = int(n1N2N3[1])
n3 = int(n1N2N3[2])
h1 = list(map(int, input().rstrip().split()))
h2 = list(map(int, input().rstrip().split()))
h3 = list(map(int, input().rstrip().split()))
result = equalStacks(h1, h2, h3)
我收到超时错误....请帮助我优化此代码。
【问题讨论】:
-
提示:答案 (5) 出现在步骤 1 中创建的所有三个列表中,即其计数为 3。