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; } };