我是 hackerrank 和编程的新手,数据结构部分的左旋转问题是我试图完成的第三个问题。我的代码如下:
#!/bin/python3
import math
import os
import random
import re
import sys
def rotateLeft(d, arr, n):
# Write your code here
x=0
while x<d:
tmp=arr[0]
for i in range(n):
if i==(n-1):
arr[i]=tmp
break
arr[i]=arr[i+1]
x+=1
return arr
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
first_multiple_input = input().rstrip().split()
n = int(first_multiple_input[0])
d = int(first_multiple_input[1])
arr = list(map(int, input().rstrip().split()))
result = rotateLeft(d, arr, n)
fptr.write(' '.join(map(str, result)))
fptr.write('\n')
fptr.close()
我提交问题后,hackerrank 表示超出时间限制,我应该优化代码。因此,我尝试使用提供的 n 变量而不是使用 len(arr),希望能加快速度,但我想这没有帮助。希望大家能给我一些优化代码的建议。非常感谢!
您可以简单地使用列表切片来解决此问题。
def rotateLeft(d, arr, n):
return arr[d:]+arr[:d]
只需使用这个 rotLeft 函数即可:
def rotLeft(a, d):
return a[d:]+a[:d]