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

京公网安备 11010502036488号