0
点赞
收藏
分享

微信扫一扫

LeetCode 189. 轮转数组*

小北的爹 2022-02-16 阅读 74

具体思想:

1.数组反转问题:

可以观察到,一次整体反转,两次局部反转,可以破解这个问题;

2.一步到位:

自己意识到可以这么做,但是没想到最大公约数问题;

具体代码:

数组反转:

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

一步到位:

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int len=nums.size();
        k%=len;
        int c=gcd(k,len);
        for(int i=0;i<c;i++){
            int temp=nums[i];
            int cur=(i+k)%len;
            while(cur!=i){
                int p=nums[cur];
                nums[cur]=temp;
                temp=p;
                cur=(cur+k)%len;
            }
            nums[i]=temp;
        }
    }
};
举报

相关推荐

0 条评论