我应该编写一个代码,将数组的每个元素向左移动一个位置,并执行此操作 d 次。例如:如果数组是 [1,2,3,4,5] 并且 d 的值为 2,则应输出以下内容: [3,4,5,1,2] (它随着每次迭代而变化如下: [1,2,3,4,5]==>[2,3,4,5,1]==>[3,4,5,1,2]
问题是在 10 个测试用例中的 2 个中,hackerrank 将我的代码计算在内
我读到使用带有 range() 函数的 for 循环比在 python 中使用 while 循环要快得多。所以我消除了所有的while循环,使代码尽可能简洁。但是,当数组中数字的大小和数量变得太大时,代码仍然会超时。
这是我的代码(大数字失败):
def rotLeft(a, d):
for i in range(0,d):
a=a[1:]+a[:1]
return a
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
nd = input().split()
n = int(nd[0])
d = int(nd[1])
a = list(map(int, input().rstrip().split()))
result = rotLeft(a, d)
fptr.write(' '.join(map(str, result)))
fptr.write('\n')
fptr.close()
这段代码是我在hackerrank上找到的一个解决方案(虽然我认为它是为python 2设计的,但这不重要):
def array_left_rotation(a, n, k):
return a[k:] + a[:k]
n, k = map(int, raw_input().strip().split(' '))
a = map(int, raw_input().strip().split(' '))
answer = array_left_rotation(a, n, k);
print ' '.join(map(str,answer))
解决方案代码通过所有测试输入,但是当数字太大和太多时我的代码失败。
温温酱
子衿沉夜
相关分类