一个数组A中存有 n 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 M( M >=0)个位置,即将A中的数据由(A0 A1 ……AN-1 )变换为(AN-M …… AN-1 A0 A1 ……AN-M-1 )(最后 M 个数循环移至最前面的 M 个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
数据范围:,
进阶:空间复杂度 ,时间复杂度
6,2,[1,2,3,4,5,6]
[5,6,1,2,3,4]
4,0,[1,2,3,4]
[1,2,3,4]
(1<=N<=100,M>=0)
function solve( n , m , a ) { if(a.length === 0 || m === 0) return a m = n > m? m : m % n let res = [] let j = 0 for(var i = 0; i < n; i++) { if(i < n - m) { res[i+m] = a[i] } else { if(j <= m - 1) { res[j] = a[i] j++ } } } return res } module.exports = { solve : solve };
function solve( n , m , a ) { // write code here m = m % n a = reverse(a, 0, n - 1) a = reverse(a, 0, m - 1) a = reverse(a, m, n - 1) return a } function reverse (arr, left, right){ for(; left < right; left ++, right --){ [arr[left], arr[right]] = [arr[right], arr[left]] } return arr }