为什么我在Google Kickstart的在线分级器中遇到运行时错误,而在我自己的IDE中却没有?

2024-09-30 10:29:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我当时正在做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


Tags: inrightforinputifsqrtleftint
1条回答
网友
1楼 · 发布于 2024-09-30 10:29:34

我在我的代码中发现了错误(在reddit的帮助下)

问题是当传入一个负数时,sqrt()方法会给出一个错误。我在在线分级机上不断得到一个RE,因为其中一个测试用例中的一个子数组的和为负数

另一个优化修复是我的代码是O(n^3),而它可以很容易地成为O(n^2)。我可以保留一个求和计数器并向其添加元素,然后检查求和是否为完美平方,而不是生成每个子数组

相关问题 更多 >

    热门问题