调试运行时错误-Hackerrank隐藏的测试用例。通过前两个测试用例

时间:2018-11-03 06:44:54

标签: python python-3.x matrix

Hackerrank问题:给定一个M * N矩阵,其中每个单元格可以具有值0或2,一个值1的单元格可以转换为2 如果它具有至少2个值为2的相邻单元,则一次找出所有可能的转换(即,转换后的单元可能不会用于转换另一单元)

约束:无

我的方法:

  1. 将输入存储在二维矩阵中
  2. 遍历每个单元格以及每个具有值1的单元格: i)获取值为2的相邻单元格列表(丢弃错误 当前单元格位于极端列时的单元格索引)
    ii)如果列表大小> = 3
  3. ,则将POSSIBLE_CONVERSIONS增加1。

这是我在Python中的解决方案:

import sys
data = sys.stdin.readlines()
dim = data.pop(0)
r = int(dim.split(' ')[0])
c = int(dim.split(' ')[1])
mat = []

def getElem(c, mat, index):
    return mat[int(index/c)][int(index % c)]

for line in data:
    arr = list(map(int, line.split()))
    mat.append(arr)

possibleConversions = 0

for i in range(0,r):
    for j in range(0,c):
        if mat[i][j] != 1:
            continue
        idx = (i * c) + j
        adjIndices = []
        if idx % c == 0:
            adjIndices = [(idx - c), (idx - c + 1), (idx + 1), (idx + c), (idx + c + 1)]
        elif (idx + 1) % c == 0:
            adjIndices = [(idx - c -1), (idx - c), (idx - 1), (idx + c - 1), (idx + c)]
        else :
            adjIndices = [(idx - c -1), (idx - c), (idx - c + 1), (idx - 1), (idx + 1), (idx + c - 1), (idx + c), (idx + c + 1)]
        adjIndices = [index for index in adjIndices if ((index >= 0) and (index < (r*c) and (getElem(c, mat, index) == 2)))]
        if (len(adjIndices) >= 3) :
            possibleConversions += 1

print(possibleConversions)

这似乎通过了2个测试用例,其余4个隐藏用例都遇到了运行时错误。 关于什么可能崩溃的任何想法?

我尝试过使用Java的相同解决方案,其中在接受4个测试用例的输入(使用Scanner或BufferedReader)时崩溃了

(花了3天时间把我的头撞在墙上)

编辑1 :放置除代码块之外的try-:

if mat[i][j] != 1:
            continue

似乎为所有4个隐藏测试用例触发了except块。我目前的怀疑是,当矩阵很大时,执行必须超时。

编辑2 :如果行或列的大小> 100,但仍看到RT错误,则可以通过将行或列任意设置为10来排除以前的理论。

0 个答案:

没有答案