EXPLANATION:对大小为n的数组进行左旋转操作 数组的每个元素都在左侧1个单位处。例如,如果2 左旋转在数组[1,2,3,4,5]上执行,然后在数组上执行 将成为[3,4,5,1,2]。
给出n个整数和一个数字的数组d,执行d个向左旋转 在阵列上。然后将更新后的数组打印为一行 用空格分隔的整数。
输入格式
第一行包含两个以空格分隔的整数,表示 n(整数个数)和d(整数个数 您必须执行左旋转)。第二行包含n 用空格分隔的整数,描述了 数组的初始状态。约束
1 <= n <= 10^5 1 <= d <= n 1 <= ai <= 10^6
输出格式打印n行以空格分隔的整数 表示执行d左移后数组的最终状态 旋转。
样本输入
5 4 1 2 3 4 5
样本输出
5 1 2 3 4
当我们执行d = 4左旋转时,数组经历以下操作 变更顺序:
[1,2,3,4,5] --> [2,3,4,5,1] --> [3,4,5,1,2] --> [4,5,1,2,3] --> [5,1,2,3,4]
因此,我们将数组的最终状态打印为一行 以空格分隔的值,即5 1 2 3 4。
代码:
import math
import os
import random
import re
import sys
def rotLeft(a, d):
for i in range(d):
temp=a[0]
for i in range(len(a)-1):
a[i]=a[i+1]
a[n-1]=temp
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()
当我在十个测试用例中运行此代码时,有两个失败,例如(由于超时而终止)
答案 0 :(得分:1)
使用切片可以轻松解决此问题:
def array_left_rotation(arr, d):
return arr[d:]+arr[:d]
该函数将返回从dth元素开始到最后的切片列表,并且此列表将与从第d-1个元素开始的元素列表连接在一起。
答案 1 :(得分:0)
这是一个问题,因此为您提供准确的解决方案要比没用的糟糕。相反,尝试改变您的想法。再次查看需求。您不一定需要存储整个数字数组;您可以简单地浏览列表,仅存储最后需要写的内容,其余内容在阅读后立即写出。这样会更快,并且使用更少的内存。
答案 2 :(得分:0)
您过分地强迫解决方案,这使执行速度非常慢。我不会告诉您确切的解决方案,但会提示一些提示:
答案 3 :(得分:0)
def rotLeft(a, d):
for i in range(d):
removed = a.pop(0)
a.append(removed)
return a
使用弹出和附加内置函数解决的问题
答案 4 :(得分:0)
HackerRank通过了所有测试案例:尝试使用此代码@glibdud非常简单易懂,避免了TLE(时间限制错误)
# Complete the rotLeft function below.
def rotLeft(a, d):
new = []
for i in range(len(a),0,-1):
new.append(a[d-i])
return new
答案 5 :(得分:0)
def rotate_left(arr, rot):
if len(arr) == 0:
return ' '
res = []
arr.reverse()
while rot > 0:
res.append(arr.pop())
rot -= 1
arr.reverse()
arr = arr+res
return ' '.join(map(str, arr))
答案 6 :(得分:0)
#!/bin/python3
import math
import os
import random
import re
import sys
def leftrotation(arraysize, rotation, array):
rotation = rotation % arraysize
temp2 = []
temp1 = array[0:rotation]
temp2 = array[rotation:]
word = ' '.join(map(str, temp2+temp1))
print(word)
if __name__ == '__main__':
nd = input().split()
n = int(nd[0])
d = int(nd[1])
a = list(map(int, input().rstrip().split()))
leftrotation(n, d, a)