首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组上的左旋转

数组上的左旋转
EN

Stack Overflow用户
提问于 2018-03-24 15:08:43
回答 12查看 8.3K关注 0票数 8

我有一个问题,我需要将一个数组向左旋转k次。

即如果k= 2,1,2,3,4,5。-> 3、4、5、1、2

所以,我的代码是:

代码语言:javascript
运行
复制
def array_left_rotation(a, n, k):
    for i in range(n):
        t = a[i]
        a[i] = a[(i+n-1+k)%n]
        a[(i+n-1+k)%n] = t

    return a

其中n=数组的长度。

我认为问题是一个映射问题,如果k= 1,则是一个-> an-1。

我的解决方案有什么问题?

EN

回答 12

Stack Overflow用户

发布于 2018-03-24 15:36:25

在索引的帮助下,另一种方法如下所示。

代码语言:javascript
运行
复制
def rotate(l, n):
    return l[n:] + l[:n]

print(rotate([1, 2, 3, 4, 5], 2))

#output : [3, 4, 5, 1, 2]

这只会在n超出[-len(l), len(l)]范围时返回原始列表。要使其适用于n的所有值,请使用:

代码语言:javascript
运行
复制
def rotate(l, n):
  return l[-n % len(l):] + l[:-n % len(l)]
票数 17
EN

Stack Overflow用户

发布于 2019-03-22 18:12:09

代码语言:javascript
运行
复制
def leftRotation(a, d, n):
    i=0
    while i < n:
        print (a[(i+d)%n], end = ' ')
        i+=1
    return i

if __name__ == '__main__':
    a =[1, 2, 3, 4, 5, 6, 7]
    d = 4
    n = 7 or len(a)
    leftRotation(a, d, n)

这就是我如何解决我的hackerrank左旋转挑战

票数 5
EN

Stack Overflow用户

发布于 2019-10-20 21:40:27

一种将数组旋转n次的简单方法是使用切片,

代码语言:javascript
运行
复制
def left_rotate(arr, n):
    # arr - array to rotate
    # n - n number of rotations
    # For number of rotations greater than length of array
    n = n % len(arr)
    return arr[n:] + arr[:n]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49462195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档