旋转数组

100 阅读1分钟

image.png 链接:www.nowcoder.com/practice/e1…

思路:开始时数组是这样的,有2部分a和b,第一部分数组a有n个,第二部分数组b有n-m个数

Pasted Graphic.png

我们的目标时这样的,把a和b位置换一下,

n-m.png 只需要,先把整个数组反转,数组a在右边,数组b在左边,

Pasted Graphic 1.png 这个时候就发现只要将a和b分别反转一下,就得到了我们要的结果了

这个题要求空间复杂度为O(1),开始没有思路,写不出来,画了图以后就简单了

class Solution {
public:
    vector<int> solve(int n, int m, vector<int>& a) {
        // write code here
        if(a.empty()) return a;
        m%=n;
        if(m==0) return a;

        reverse(a.begin(), a.end());
        reverse(a.begin(), a.begin()+m);
        reverse(a.begin()+m, a.end());
        return a;
    }
};