在 IDE 上完美运行,但行(如果 mat[j] == mat[colindex]:) 在为极客提交极客时出现索引超出范围错误

Posted

技术标签:

【中文标题】在 IDE 上完美运行,但行(如果 mat[j] == mat[colindex]:) 在为极客提交极客时出现索引超出范围错误【英文标题】:Running perfectly on IDE but line (if mat[j] == mat[colindex]:) is giving index out of range error when submitting on geeks for geeks 【发布时间】:2020-08-18 05:39:41 【问题描述】:
t = int(input())
lis =[]
for i in range(t):
    col = list(map(int,input()))
    colindex = col[0] - 1
    count = 0
    matsize = col[0] * col[0]
    mat = list(map(int,input().split()))
    while len(lis) != matsize:
        for j in range(len(mat)):
            if colindex < len(mat):
                if mat[j] == mat[colindex]:
                    lis.append(mat[j])
                    colindex += col[0]
        count += 1
        colindex = col[0] - 1
        colindex -= count
    for i in lis:
        print(i,end= ' ')

给定一个大小为 N x N 的方阵 mat[][]。任务是在不使用任何额外空间的情况下将其逆时针方向旋转 90 度。

输入: 输入的第一行包含一个整数 T,表示测试用例的数量。然后是 T 测试用例。每个测试用例由两行组成。每个测试用例的第一行包含一个整数 N,其中 N 是方阵的大小。每个测试用例的第二行包含矩阵 mat 的 N x N 个空格分隔值。

输出: 对应每个测试用例,换行打印旋转后的数组。

约束: 1≤T≤50 1≤N≤50 1

示例: 输入:

2

3

1 2 3 4 5 6 7 8 9

2

5 7 10 9

输出:

3 6 9 2 5 8 1 4 7

7 9 5 10

说明: 测试用例1:矩阵如下:

1 2 3

4 5 6

7 8 9

逆时针旋转 90 度会得到如下矩阵:

3 6 9

2 5 8

1 4 7

https://practice.geeksforgeeks.org/problems/rotate-by-90-degree/0

【问题讨论】:

向我们展示完整的错误输出! 【参考方案1】:

j 似乎没有问题。 colindex 可以低于 0 吗?识别这一点的一种方法是简单地跟踪计数器。例如,您可以在 if mat[j] == mat[colindex] 之前添加额外的 if 条件 if colindex &gt;= 0:

【讨论】:

【参考方案2】:

我们可以使用二维列表来解决这个挑战,而不是使用一维列表。从给定的语句和示例测试用例中,我们得到以下信息:

将旋转后的矩阵打印在一行中。 如果给定矩阵具有n 列,则旋转矩阵将具有n-1th 列、n-2th 列、..0th 列的顺序元素。

这是我接受的这个挑战的解决方案:

def get_rotated_matrix(ar, n):
    ar_2d = []
    for i in range(0, len(ar)-n+1, n):
        ar_2d.append(ar[i:i+n])
    result = []
    for i in range(n-1, -1, -1):
        for j in range(n):
            result.append(str(ar_2d[j][i]))
    return result


cas = int(input())
for t in range(cas):
    n = int(input())
    ar = list(map(int, input().split()))
    result = get_rotated_matrix(ar, n)
    print(" ".join(result))

说明:

为了简化解决方案,我创建了一个二维列表,将输入数据存储为一个名为 ar_2d 的二维矩阵。 然后我逐列遍历矩阵;从最后一列到第一列,并将值作为字符串值附加到我们的result 列表中。 最后,我使用join 方法打印了元素之间带有空格的结果。

免责声明:

我的解决方案使用一维列表来存储旋转的矩阵元素,因此会占用额外的空间。

【讨论】:

以上是关于在 IDE 上完美运行,但行(如果 mat[j] == mat[colindex]:) 在为极客提交极客时出现索引超出范围错误的主要内容,如果未能解决你的问题,请参考以下文章

10款优秀Vim插件帮你打造完美IDE

10款优秀Vim插件帮你打造完美IDE

10款优秀Vim插件帮你打造完美IDE

程序在pycharm中完美运行,在终端运行时给出错误答案

从 cv::Mat 获取部分数据

Opencv利用Mat访问像素值