leetcode之旋转数组python实现

原题如下:

    输入: [1,2,3,4,5,6,7]k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4]

   解题思路:首先旋转无论怎样旋转都不会超过数组的最大数。接着分析,如果我们向右旋转一位,可以发现,原来的nums[6]变成了nums[0],也就是最大循环就是数组的个数,所以我们自然而然的想到了取余。如果我们要在个数为7的数组里左移3位,那么可以看到原来的nums[6]变成了nums[2],整体去看,是不是整个后四位与前三位位置进行了对调。所以运用python切片的原理一行代码就可以实现空间复杂度O(1)的算法。

       假设输入旋转数为k 列表名为nums 代码如下:

       if(len(nums)==None)or(len(nums)==1):

             rerurn nums[:]

      else:

              i = len(nums)%k

              nums[:] = nums[i:len(nums)-1]+nums[:i-1]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值