首页 > 试题广场 >

旋转数组

[编程题]旋转数组
  • 热度指数:53983 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
一个数组A中存有 n 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 M( M >=0)个位置,即将A中的数据由(A0 A1 ……AN-1 )变换为(AN-M …… AN-1 A0 A1 ……AN-M-1 )(最后 M 个数循环移至最前面的 M 个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

数据范围:
进阶:空间复杂度 ,时间复杂度
示例1

输入

6,2,[1,2,3,4,5,6]

输出

[5,6,1,2,3,4]
示例2

输入

4,0,[1,2,3,4]

输出

[1,2,3,4]

备注:
(1<=N<=100,M>=0)
function solve( n ,  m ,  a ) {
    // write code here
    for(let i=0;i<m;i++){
        a.unshift(a.pop())
    }
    return a
}

发表于 2022-08-11 14:25:10 回复(0)
/**
 * 旋转数组
 * @param n int整型 数组长度
 * @param m int整型 右移距离
 * @param a int整型一维数组 给定数组
 * @return int整型一维数组
 */
function solve( n ,  m ,  a ) {
    // write code here
    let endNum = n > m ? m : m%n;
    return a.splice(a.length-endNum).concat(a);
}
module.exports = {
    solve : solve
};

发表于 2021-11-28 00:14:59 回复(0)
function solve( n ,  m ,  a ) {
    let p = n<m?n-m%n:m==0?0:n-m
    let arr1 = a.slice(0,p)
    let arr2 = a.slice(p)
    return arr2.concat(arr1)
}
发表于 2021-10-22 19:01:31 回复(0)
function solve( n ,  m ,  a ) {
    // write code here
    var move = m % n;
    return a.splice(n-move).concat(a.splice(0,n-move));
}

发表于 2021-04-24 11:32:59 回复(0)
把头部移动到尾部,计算好移动次数即可function solve( n ,  m ,  a ) {
    // write code here
    
    for(let i=0;i<n-m%n;++i){
        a.push(a.shift())
    }
    return a
    
}


编辑于 2021-03-10 08:57:52 回复(1)
所以说这道题到底在考啥 用slice 移动次数最少
function solve( n ,  m ,  a ) {
    // write code here
    m = m % n;
    return  a.slice(n-m,n).concat(a.slice(0,n-m))
}

发表于 2020-12-18 10:22:20 回复(1)
/**
 * 旋转数组
 * @param n int整型 数组长度
 * @param m int整型 右移距离
 * @param a int整型一维数组 给定数组
 * @return int整型一维数组
 */
function solve( n ,  m ,  a ) {
    // write code here
    return (a.splice((a.length - m%a.length),m%a.length)).concat(a)
    
}
module.exports = {
    solve : solve
};
发表于 2020-11-21 13:22:37 回复(0)