(数组) leetcode 189. Rotate Array

注意:k可能比数组的长度大,所 k = k%n (n为数组长度)。

思路一:暴力法。循环移动k次。

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        
        int a = 0;
        for(int i=0; i< k%nums.size(); ++i){
            a = nums.back();   //取nums的最后一个元素
            nums.insert(nums.begin(), a);   //插入到nums开头
            nums.pop_back();   //删除最后一个元素
        }
    }
};

思路二:先把前 n-k 个数字翻转一下,再把后k个数字翻转一下,最后再把整个数组翻转一下:

1 2 3 4 5 6 7 
4 3 2 1 5 6 7 
4 3 2 1 7 6 5
5 6 7 1 2 3 4

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int n = nums.size();
        k = k%n;   //k对n取余
        if(nums.empty() || k ==0 )
            return;
        reverse(nums.begin(), nums.begin()+n-k);  // [first, end)
        reverse(nums.begin()+n-k, nums.end());    //reverse 从索引为n-k到末尾
        reverse(nums.begin(), nums.end());    //reverse整个nums
    }
};

猜你喜欢

转载自www.cnblogs.com/Bella2017/p/11263973.html
今日推荐