leetcode 189. 轮转数组

2023.9.3

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

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

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

class Solution {
public:
    void rotate(vector& 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函数能否派上用场。

你可能感兴趣的:(leetcode专栏,leetcode,算法,数据结构,cpp)