LeetCode 热题 100 — 轮转数组

0 阅读1分钟

大家好,我是银包金。今天分享的题目是LeetCode热题100中的题目 轮转数组,分享解题思路。

先看题目:

image.png

方法一:使用额外的数组

这里其实很容易知道数组元素中轮转后的下标,可以由当前下标index加上 k%nums.length。 直接建立一个新数组,根据下标拷贝过去,这里就不做演示了。

方法二:原地旋转

这个方法可谓是魔法!

让我们看一下灵神是怎么讲的:

image.png

从这个图可以清晰的看懂。

代码如下:

class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        k %= n;
        reverse(nums,0,n-1);
        reverse(nums,0,k-1);
        reverse(nums,k,n-1);
    }
    private void reverse(int[] nums,int i,int j){
        while(i<j){
            int temp = nums[i];
            nums[i++] = nums[j];
            nums[j--] = temp;
        }
    }
}