HackerRank动态数组问题-代码中的运行时错误

时间:2019-10-12 01:27:43

标签: python data-structures dynamic-arrays

我正在尝试在HackerRank上解决此Dynamic Array problem。这是我的代码:

#!/bin/python3

import math
import os
import random
import re
import sys

#
# Complete the 'dynamicArray' function below.
#
# The function is expected to return an INTEGER_ARRAY.
# The function accepts following parameters:
#  1. INTEGER n
#  2. 2D_INTEGER_ARRAY queries
#

def dynamicArray(n, queries):
    lastAnswer = 0
    a = []
    array_result = []
    for k in range(n):
        a.append([])

    for i in queries:
        x = i[1]
        y = i[2]
        if i[0] == 1:
            seq = ((x ^ lastAnswer) % n)
            a[seq].append(y)
        elif i[0] == 2:
            seq = ((x ^ lastAnswer) % n)
            lastAnswer = a[seq][y]
            array_result.append(lastAnswer)
    return array_result

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    first_multiple_input = input().rstrip().split()

    n = int(first_multiple_input[0])
    q = int(first_multiple_input[1])

    queries = [] # 1 0 5, 1 1 7, 1 0 3, ...

    for _ in range(q):
        queries.append(list(map(int, input().rstrip().split())))

    result = dynamicArray(n, queries)

    fptr.write('\n'.join(map(str, result)))
    fptr.write('\n')

    fptr.close()

我遇到运行时错误:

  

回溯(最近通话最近一次):

     

文件“ Solution.py”,第50行,位于

     

fptr.write('\ n'.join(map(str,result)))

     

TypeError:“ NoneType”对象不可迭代

有人可以帮我吗,我似乎找不到解决方法。

这是输入:

  

2 5

     

1 0 5

     

1 1 7

     

1 0 3

     

2 1 0

     

2 1 1

谢谢。

  

更新:由于@cireo,此输入现在似乎可以使用,但是该代码不适用于其他测试用例。这段代码有什么问题?

2 个答案:

答案 0 :(得分:1)

您问题的答案在于hackerrank提供的样板。

# The function is expected to return an INTEGER_ARRAY.

您还可以看到,result = dynamicArray(n, queries)应该从map(str, result)返回一个整数列表,这会引发异常。

在您的代码中您进行了print(lastAnswer),但您可能想要

+ ret = []
    ...
-     print(lastAnswer)
+     ret.append(lastAnswer)
+ return ret

相反。

由于您不返回任何内容,因此该函数默认返回None,而map无法对其进行迭代。

答案 1 :(得分:1)

你可以试试这个,它工作得很好。(没有运行时错误)

<块引用>

用此代码替换您的 dynamicArray 函数。希望这对你有帮助(^_^)。

定义动态数组(n,查询):

col = [[] for i in range(n)]
res = []
lastanswer = 0
for q in queries:
    data = (q[1]^lastanswer)%n
    if q[0] == 1:
        col[data].append(q[2])
    elif q[0] == 2:
        ind_x = q[2]%len(col[data])
        lastanswer = col[data][ind_x]
        res.append(lastanswer)
return res