Python 数组左旋转|破解编码面试黑客等级-(因超时而终止)

Python 数组左旋转|破解编码面试黑客等级-(因超时而终止),python,python-3.x,Python,Python 3.x,说明:在大小为n个移位的数组上执行左旋转操作 阵列的每个元素向左各1个单元。例如,如果2 对数组[1,2,3,4,5]执行左旋转,然后对数组执行左旋转 将成为[3,4,5,1,2] 给定一个由n个整数和一个数字d组成的数组,执行d个左旋转 在阵列上。然后将更新后的数组打印为一行 空格分隔整数 输入格式 第一行包含两个空格分隔的整数,表示 n表示整数的个数,d表示整数的个数 必须执行左旋转。第二行包含n 空间分隔整数,用于描述 数组的初始状态。约束条件 1 <= n <= 10^5

说明:在大小为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 
样本输出

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

代码:


当我在十个测试用例中运行这段代码时,有两个失败了,比如由于超时而终止,这是一个问题,所以给你精确的解决方案比没有用更糟糕。相反,试着改变你的想法。再看一遍需求。您不一定需要存储整个数字数组;你可以简单地一步一步地浏览列表,只在最后存储你需要写的内容,阅读完后立即写下其余的内容。这将更快,并且使用更少的内存。

您对解决方案的强制太多,导致执行非常缓慢。我不会告诉你确切的解决方案,但我脑海中有几个提示:

减少左操作的数量提示:考虑mod操作 数组的元素不会任意改变位置。他们只移动了d次。试着想出一种不使用嵌套循环而利用这些信息的方法。
通过使用pop和append内置函数解决了问题

黑客链接所有通过的测试用例:尝试使用此代码@glibdud非常简单易懂,避免了时间限制错误

# 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

使用切片可以轻松解决此问题:

def array_left_rotation(arr, d):
    return arr[d:]+arr[:d]
函数将返回从第dth元素开始到第d-1元素结束的切片列表,该列表将与从开始到第d-1元素的元素列表连接起来。

您能否回答您的问题以解释此代码示例如何回答该问题?
def rotLeft(a, d):

    for i in range(d):
        removed = a.pop(0)
        a.append(removed)
    return a
# 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
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))
#!/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)
def array_left_rotation(arr, d):
    return arr[d:]+arr[:d]