class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 旋转数组
* @param n int整型 数组长度
* @param m int整型 右移距离
* @param a int整型vector 给定数组
* @return int整型vector
*/
// 找到最小公倍数
int findMin(int a, int b){
int n = 0;
int max = a > b ? a : b;
int min = a > b ? b : a;
int cnt = max / min;
while (1) {
n = cnt * min;
if(n % max == 0) break;
++cnt;
}
return n;
}
vector<int> solve(int n, int m, vector<int>& a) {
// write code here
int tmp = 0;
int pre = a[0];
int idx = 0;
m = m % a.size();
if(m == 0) return a;
int max = findMin(m, a.size());
for(int i = 0; i < a.size(); i++){
idx += m;
tmp = a[idx % a.size()];
a[idx % a.size()] = pre;
pre = tmp;
if(idx >= max){
idx = idx % a.size() + 1;
pre = a[idx];
}
}
return a;
}
};