方法:翻转数组

可以很容易的知道右移次数等于数组的元素个数时等于没有移动,所以右移m位,其实等同于右移m%n位;

1、先翻转数组的所有元素;

2、翻转数组的前m个元素;

2、翻转数组的剩余n-m个元素。就可以得到右移m位的数组。

时间复杂度:o(n)

空间复杂度:o(1)

class Solution {
public:
    vector<int> solve(int n, int m, vector<int>& a) {
        // 特殊情况处理
        if (a.size() == 1 || m == 0)
            return a;
        // 右移位数
        m = m % n;
        // 翻转全部数组
        reverse(a.begin(), a.end());
        // 翻转数组前m个元素
        reverse(a.begin(), a.begin() + m);
        // 翻转数组剩余的元素
        reverse(a.begin() + m, a.end());

        return a;
    }
};