题目
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例
示例1
输入 :[1,2,3,4,5,6,7] 和k = 3;
输出: [5, 6, 7, 1, 2, 3, 4]
解释:
向右旋转 1步: [7, 1,2,3,4,5,6]
向右旋转 2 步:[6, 7, 1,2,3,4,5]
向右旋转 3 步:[5,6,7,1,2,3,4]
示例2
输入 [-1, -100, 3, 99] 和 k = 2
输出 [3, 99, -1, -100]
解释:
向右旋转1步: [99, -1, -100, 3]
向右旋转2步: [3, 99, -1 , -100]
尽可能想出更多的解决方案,至少有三各不同的方法可以解决这个问题。
要求使用空间复杂度为O(1)的原地算法。
参考答案
function testArr(arr, k) {if (!arr.length || k < 0 || k > arr.length) {return false;}// 直接切割// return arr.splice(arr.length - k).concat(arr);// 按步,从后向前 切割// let tempArr = [];// while (k > 0) {// let num = arr.pop();// tempArr.unshift(num);// k--;// }// return tempArr.concat(arr);// 从前向后加const temp = arr.splice(0, arr.length - k);return arr.concat(temp);}const arr = [1,2,3,4,5,6,7];const k = 3;const res = testArr(arr, k);console.log("res", res);
