题目

给定一个数组,将数组中的元素向右移动 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)的原地算法。

参考答案

  1. function testArr(arr, k) {
  2. if (!arr.length || k < 0 || k > arr.length) {
  3. return false;
  4. }
  5. // 直接切割
  6. // return arr.splice(arr.length - k).concat(arr);
  7. // 按步,从后向前 切割
  8. // let tempArr = [];
  9. // while (k > 0) {
  10. // let num = arr.pop();
  11. // tempArr.unshift(num);
  12. // k--;
  13. // }
  14. // return tempArr.concat(arr);
  15. // 从前向后加
  16. const temp = arr.splice(0, arr.length - k);
  17. return arr.concat(temp);
  18. }
  19. const arr = [1,2,3,4,5,6,7];
  20. const k = 3;
  21. const res = testArr(arr, k);
  22. console.log("res", res);