方法:翻转数组
可以很容易的知道右移次数等于数组的元素个数时等于没有移动,所以右移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; } };