GeeksForGeeks 练习:在Python中打印大于其大小的数组

3
问题:https://practice.geeksforgeeks.org/problems/array-of-alternate-ve-and-ve-nos1401/1# 我的代码如下所示。在我的电脑上以及在我在GFG上编译和运行时都能完美运行。但是当我提交代码时,它会在与compile & run中清除的相同输入上给我错误。
我已经添加了compile & runsubmit的输出。

enter image description here

enter image description here

为什么打印出的数组大小超过了它的实际大小?
#User function Template for python3
def updatePosIndex(array, pos_index,n,k):
    for index in range(pos_index+k,n):
        if array[index] >= 0:
            pos_index = index
            break
    return pos_index

def updateNegIndex(array, neg_index,n, k):
    for index in range(neg_index+k,n):
        if array[index] < 0:
            neg_index = index
            break
    return neg_index

def twoPointer(array,n):
    pos_index = updatePosIndex(array, 0, n, 0)
    neg_index = updateNegIndex(array, 0, n, 0)
    flag = 1
    for i in range(n):
        if flag == 1:
            if array[i] < 0:
                array[i], array[pos_index] = array[pos_index], array[i]
                neg_index = updateNegIndex(array, neg_index,n, 1)
            pos_index = updatePosIndex(array, pos_index,n, 1)
        elif flag == -1:
            if array[i] >= 0:
                array[i], array[neg_index] = array[neg_index], array[i]
                pos_index = updatePosIndex(array, pos_index,n, 1)
            neg_index = updateNegIndex(array, neg_index,n, 1)
        flag = flag*-1
    return array

class Solution:
    def rearrange(self,arr, n):
        arr = twoPointer(arr,n)
        arr = arr[:n]
        return arr

#{ 
#  Driver Code Starts
#Initial Template for Python 3

if __name__ == '__main__':
    tc = int(input())
    while tc > 0:
        n = int(input())
        arr = list(map(int, input().strip().split()))
        ob = Solution()
        ob.rearrange(arr, n)
        for x in arr:
            print(x, end=" ")
        tc -= 1

# } Driver Code Ends

注意:我不想要替代方案。我想知道为什么存在这个问题以及如何在将来防止它发生。

解释一下你的代码?tc是什么? - user202729
1
@user202729--我相信tc代表测试用例(即要运行的测试数量)。 - DarrylG
3
我怀疑这不是你的错,他们在打印结果的驱动程序代码部分存在一个漏洞:它在同一行上打印了所有用例...不幸的是,你无权编辑驱动程序部分。所以你只能开一个工单/报告漏洞,等待他们回复。 - Nir Alfasi
@NirAlfasi 谢谢你的回答!但是,我已经收到我的导师的消息,解决方案是正确的,问题出在他们的平台上。 - Ash
1
更新:我昨天在GFG中提出了一个案例,几个小时前收到了回复:“您好, 感谢您向我们报告此问题。我们已经修复了这个问题。请刷新页面,然后使用右上角的第二个按钮重置IDE,再次提交您的代码。” FYI - Nir Alfasi
1个回答

1
有两个问题:
第一个(次要)是您必须在rearrange方法内更改arr列表,无需返回任何值。看一下驱动程序代码。那里没有分配。因此,您只需要更改rearrange方法中的arr列表。
第二个(主要),还有一个GeeksForGeeks评判系统中的错误。当驱动程序打印先前运行的输出时,它不会清除缓冲区,不幸的是新输入和旧输出合并在一起,因此评判系统会误评结果。
为了解决这些问题,我稍微修改了Solution类:
Flag = False
class Solution:
    def rearrange(self,arr, n):
        global Flag
        twoPointer(arr,n)
        if Flag == True:
            print()
        else:
            Flag = True

现在,你的代码已经成功通过了第一个测试用例。但似乎它不能正确地运行第二个结果。但这是另一个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接