leetcode 189. Rotate Array
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7]
is rotated to [5,6,7,1,2,3,4]
.
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
Related problem: Reverse Words in a String II
选择数组,将数组向右以为k步,在《编程珠玑》中有讲过这个算法,下面是比较好理解的“两手翻转法”
下面为python代码,自己写的不是很geek
class Solution(object): def rotate(self, nums, k): """ :type nums: List[int] :type k: int :rtype: void Do not return anything, modify nums in-place instead. """ while k >= len(nums): k -= len(nums) for i, v in enumerate(nums[-k::] + nums[:-k]): nums[i] = v
后面改进:
class Solution(object):
def rotate(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: void Do not return anything, modify nums in-place instead.
"""
if not nums: return
k %= len(nums)
nums[0:k], nums[k:] = nums[- k:], nums[0: - k]
另外一种解法:
class Solution { public: void rotate(int nums[], int n, int k) { int nowIndex = 0, nextIndex; int tmp1, tmp2 = nums[0]; for(int j=0,i=0; j<n; j++){ tmp1 = tmp2; nowIndex = (k + nowIndex) % (n); tmp2 = nums[nowIndex]; nums[nowIndex] = tmp1; if(nowIndex == i) { nowIndex = ++i; tmp2 = nums[nowIndex]; } } } };