leetcode 189. Rotate Array

Posted godjob

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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];
            }
        }
    }
};

 

以上是关于leetcode 189. Rotate Array的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 189. Rotate Array

leetcode 189. Rotate Array

LeetCode OJ 189. Rotate Array

#Leetcode# 189. Rotate Array

LeetCode 189 Rotate Array(旋转数组)

LeetCode 189. Rotate Array (旋转数组)