leetcode 189. 轮转数组

2023.9.3

        k的取值范围为0~100000,此时需要考虑到两种情况,当k为0时,此时数组不需要轮转,因此直接return返回;当k大于等于数组nums的大小时,数组将会转为原来的数组,然后再接着轮转,此时可以先处理一下k值:k = k % nums.size();  接下来再构造一个新数组用来装轮转过后的元素值即可。 代码如下:

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        k = k % nums.size(); //k可能大于nums.size()
        if(k == 0) return;
        vector<int> ans(nums.size());
        int seg = nums.size()-k;
        int j = 0;
        for(int i=seg; i<nums.size(); i++)
        {
            ans[j] = nums[i];
            j++;
        }
        for(int i=0; i<seg; i++)
        {
            ans[j] = nums[i];
            j++;
        }
        nums = ans;
    }
};

 优化:本题数组可以原地修改。

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        k = k % nums.size();
        reverse(nums.begin(),nums.end());
        reverse(nums.begin(),nums.begin()+k);
        reverse(nums.begin()+k,nums.end());
    }
};

        ps:看到需要反转的题,可以考虑一下reverse函数能否派上用场。

猜你喜欢

转载自blog.csdn.net/m0_61028090/article/details/132649256
今日推荐