我当时正在做Google Kickstart 2020第三轮C,我的“完美子阵列”问题代码不断给我一个在线评分器的运行时错误
我确实意识到我的代码效率不高(我使用了蛮力技术来检查每个子数组);但是,当我在本地运行“测试集1”时,它确实可以正常工作
这是我的密码:
from math import sqrt
testCases = int(input())
outputLines = []
def isPerfect(left,right):
summed = sum(arrayOfIntNumbers[left:right+1])
squareRoot = sqrt(summed)
intSquareRoot = int(squareRoot)
if(squareRoot == intSquareRoot):
return True
else:
return False
for test in range(testCases):
numOfnumbers = int(input())
stringOfnumbers = input()
arrayOfStringNumbers = stringOfnumbers.split()
arrayOfIntNumbers = [int(stringNumber) for stringNumber in arrayOfStringNumbers]
# checks with everything ahead of it
perfectSumsCount = 0
for i, number in enumerate(arrayOfIntNumbers[0:len(arrayOfIntNumbers)-1]): # go thru all but the last one
currentPosition = i + 1
# disallow for last item. done above
while(currentPosition < len(arrayOfIntNumbers)): # goes tille nd
# checker function. left bound right bound
if (isPerfect(i,currentPosition) == True):
perfectSumsCount += 1
#print(str(i+1) + " " + str(currentPosition+1))
currentPosition += 1
for numero in arrayOfIntNumbers:
squareRoot = sqrt(numero)
intSquareRoot = int(squareRoot)
if(squareRoot == intSquareRoot):
perfectSumsCount += 1
outputLines.append("Case #" + str(test + 1) + ": " + str(perfectSumsCount))
for output in outputLines:
print(output)
请让我知道我做错了什么
问题是:https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ff43/00000000003381cb
我在我的代码中发现了错误(在reddit的帮助下)
问题是当传入一个负数时,sqrt()方法会给出一个错误。我在在线分级机上不断得到一个RE,因为其中一个测试用例中的一个子数组的和为负数
另一个优化修复是我的代码是O(n^3),而它可以很容易地成为O(n^2)。我可以保留一个求和计数器并向其添加元素,然后检查求和是否为完美平方,而不是生成每个子数组
相关问题 更多 >
编程相关推荐