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.

[show hint]

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];
            }
        }
    }
};
原文地址:https://www.cnblogs.com/UnGeek/p/5503610.html