1. 程式人生 > 其它 >演算法:js陣列迴圈右移問題

演算法:js陣列迴圈右移問題

技術標籤:演算法javascript前端演算法leetcode

演算法:js陣列迴圈右移問題

題目描述

一個數組A中存有N(N&gt0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移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]

解題思路:

關鍵:
當m > n時,防止出現數組溢位的問題,m要取模;

正常來說 m < n時,只有最後 第n-m 個到 第n個才會迴圈右移到新陣列的開頭位置,剩下的陣列元素順序沒變,所以直接拼接上就可以了。

程式碼:

/**
 * 旋轉陣列
 * @param n int整型 陣列長度
 * @param m int整型 右移距離
 * @param a int整型一維陣列 給定陣列
 * @return int整型一維陣列
 */
function solve( n ,  m ,  a ) {
    // write code here
    if(m>n) m = m % n;
    return a.splice(n-m,n).concat(a)
; }

題目連結: 旋轉陣列