演算法:js陣列迴圈右移問題
阿新 • • 發佈:2021-02-02
技術標籤:演算法javascript前端演算法leetcode
演算法:js陣列迴圈右移問題
題目描述
一個數組A中存有N(N>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移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) ;
}
題目連結: 旋轉陣列