class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 旋转数组
* @param n int整型 数组长度
* @param m int整型 右移距离
* @param a int整型vector 给定数组
* @return int整型vector
*/
/*
观察式子,6,2 [1,2,3,4,5,6] 右移2位的结果等价于:
1. 反转整个数组 [6,5,4,3,2,1]
2. 反转数组开始到第2位,[5,6,4,3,2,1]
3. 反转数组从第2位到最后 [5,6,1,2,3,4]
发现有此次规律,我们可以大胆假设,然后小心验证测试一下
*/
vector<int> solve(int n, int m, vector<int>& a) {
// write code here
m = m % n; // 容易知道,当 m >= n时右移的情况会与 m < n中的一种情况相重。所以取余即可
//1
reverse(a.begin(), a.end());
//2
reverse(a.begin(), a.begin() + m);
//3
reverse(a.begin() + m, a.begin() + n);
return a;
}
};