leetcode刷题笔记——189.旋转数组

题目

leetcode刷题笔记——189.旋转数组_第1张图片

思路

该题可使用较多方法,做题时我只想到第一种比较简单的方法,后看题解第二种方法由于第一种

第一种

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int> newArr(n);
        for (int i = 0; i < n; ++i) {
            newArr[(i + k) % n] = nums[i];
        }
        nums.assign(newArr.begin(), newArr.end());
    }
};

定义一个辅助数组,用于保存旋转后的数组
推一下,[1,2,3,4,5,6,7] k=3时,nums[1]旋转后到了nums[4],nums[3]旋转后到了nums[6],nums[5]旋转后到了nums[1],符合规律第i个位置旋转后到了(i+k)%n。

后使用vector.assign进行vector的整体赋值。

第二种
leetcode刷题笔记——189.旋转数组_第2张图片
所以任何数组的旋转都可以翻转3次达到。

public:
    void reverse(vector<int>& nums, int start, int end){
        while(start<end){
        swap(nums[start],nums[end]);
        start++;
        end--;
        }
    }
    void rotate(vector<int>& nums, int k) {
        int n = nums.size();
        k = k%n;
        reverse(nums, 0, n-1);
        reverse(nums, 0, k-1);
        reverse(nums, k, n-1);

    }
};

注意k要对n取余

你可能感兴趣的:(leetcode)