【问题标题】:GeeksForGeeks practice: printing array bigger than its size in pythonGeeksForGeeks 实践:在 python 中打印大于其大小的数组
【发布时间】:2021-01-31 15:54:53
【问题描述】:

问题:https://practice.geeksforgeeks.org/problems/array-of-alternate-ve-and-ve-nos1401/1#

我的代码添加在下面。它在我的机器上以及当我在 GFG 上 compile & run 时运行得非常好。但是当我submit 代码时,它给了我在compile & run 中清除的相同输入的错误。

我添加了compile & runsubmit 的输出。

为什么打印的数组大于它的大小?

#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--我相信 tc 代表测试用例(即要运行的测试数量)。
  • 我怀疑这不是你的错,他们在打印结果的部分的驱动程序代码中有一个错误:它将所有用例打印在同一行......不幸的是你不允许编辑驱动程序部分。所以你可以打开一个票/错误并等待他们响应。
  • @NirAlfasi 感谢您的回答!但是,我已经从我的导师那里得到消息,说解决方案是正确的,他们的平台存在问题。
  • 更新:我昨天在 GFG 开了一个案例,这是我几个小时前收到的回复:“嗨,感谢您提醒我们注意这个问题。我们已经解决了这个问题。请刷新页面然后使用右上角的第二个按钮重置 IDE 并再次提交您的代码。”仅供参考

标签: python arrays python-3.x


【解决方案1】:

有两个问题:

首先(次要)您必须更改rearrange 方法内的arr 列表,并且无需返回任何值。看一下驱动代码。那里没有任务。所以您只需要更改rearrange 方法内的arr 列表即可。

第二(主要)GeeksForGeeks法官系统内部也有一个bug。当驱动程序打印之前运行的输出时,它不会清除缓冲区,不幸的是,新输入和旧输出合并在一起,因此判断系统错误地评估了结果。

为了克服这些问题,我稍微更改了Solution 类:

Flag = False
class Solution:
    def rearrange(self,arr, n):
        global Flag
        twoPointer(arr,n)
        if Flag == True:
            print()
        else:
            Flag = True

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多