翼度科技»论坛 编程开发 JavaScript 查看内容

JS算法题解旋转数组方法示例

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
题目

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例 1:
  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. 输入: [-1,-100,3,99] 和 k = 2 输出: [3,99,-1,-100]
复制代码
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]

答案


解法1:
  1. const rotate = (nums, k) => {
  2.     for(var i = 0; i<k; i++){
  3.         nums.unshift(nums.pop());
  4.     }
  5.     return nums;
  6. }
复制代码
解法2:
  1. const rotate = (nums, k) => {
  2.     const n = nums.length;
  3.     let tmpEnd = 0;
  4.     let tmpPrev = 0;
  5.     for(let i = 0; i<k; i++) {
  6.         tmpEnd = nums[n-1];
  7.         for(let r = 0; r<n; r++) {
  8.             tmpPrev = nums[r];
  9.             nums[r] = tmpEnd;
  10.             tmpEnd = tmpPrev;
  11.         }
  12.     }
  13.     return nums
  14. };
复制代码
解法3:
  1. const rotate = (nums, k) => {
  2.     const n = nums.length;
  3.     let reversePoint = n - k%n;
  4.     reversePoint != 0 && (nums = nums.slice(reversePoint).concat(nums.slice(0, reversePoint)));
  5.     return nums;
  6. }
复制代码
解法4:
  1. const rotate = (nums, k) => {
  2.     const n = nums.length;
  3.     let newArr = new Array(n);
  4.     for(let i = 0;i<n; i++){
  5.         newArr[(i+k)%n] = nums[i];
  6.     }   
  7.     for(let r = 0; r<n; r++){
  8.         nums[r] = newArr[r];
  9.     }  
  10.     return nums  
  11. }
复制代码
以上就是JS算法题解旋转数组方法示例的详细内容,更多关于JS算法题解旋转数组的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/javascript/2920893lm.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具