189. Rotate Array

Given an array, rotate the array to the right by k steps, where k is non-negative.

Example 1:

Input: [1,2,3,4,5,6,7] and k = 3
Output: [5,6,7,1,2,3,4]
Explanation:
rotate 1 steps to the right: [7,1,2,3,4,5,6]
rotate 2 steps to the right: [6,7,1,2,3,4,5]
rotate 3 steps to the right: [5,6,7,1,2,3,4]

Example 2:

Input: [-1,-100,3,99] and k = 2
Output: [3,99,-1,-100]
Explanation: 
rotate 1 steps to the right: [99,-1,-100,3]
rotate 2 steps to the right: [3,99,-1,-100]

Note:

  • Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
  • Could you do it in-place with O(1) extra space?

k非负。k=0就返回原来的列表。

k>0,列表后面接上原来的一个列表,然后可以截取索引k+1到最后一个,然后返回。但是空间复杂度不是1.

另一种方法:

1234567

7234561

7134562

7124563

7123564

7123465

7123456

利用一个temp和列表最后一个元素,来进行交换。

超时了~!!!!!

想想还有什么改进的方法?

5674123

直接倒数三个一起跟前面换。但是空间复杂度又高了。

倒数第k个跟nums[0]换,倒数第一个跟nums【k-1】换,然后除去前k个,然后剩下的再进行这样的操作。

结果忘记考虑,k>len(nums)的情况,其实这种情况一定跟其中一种k<len(nums)的情况一样。取余就可以


边界弄错了~

discuss:

太机智了


python 版本


时间复杂度 O(N) N 是list长度


猜你喜欢

转载自blog.csdn.net/zhangdamengcsdn/article/details/80325083
今日推荐