JS旋转数组是什么 环状替换怎样理解
关于“JS旋转数组是什么,环状替换如何理解”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。 1.什么是旋转数组 旋转数组分为左旋转和右旋转两类,力扣 189 题为右旋转的情况,今日分享的为左旋转。 给定一个数组,将数组中的元素向左旋转 k 个位置,其中 k 是非负数。 2.环状替换 环状替换比较难理解。如果把数组的数据放在正多边形上,以走跳棋的思路替换数据,画个图就好理解了。 假如 n=5, k=2, 数字1-5依次放在五边形顶点,数字替换的轨迹是1-3-5-2-4-1,回到原点,count = n, 结束。轨迹画出来刚好是个五角星。 假如 n=6, k=2, 数字1-6依次放在六边形顶点,数字替换的轨迹是1-3-5-1,回到原点了,count < n, start++, 接着 2-4-6-2,回到原点,count = n, 结束。轨迹是六边形的2个内嵌正三角形。 其它多边形类似,隔k个点往前走,总能走回原点,如果中间有漏的,旋转一个角的方位重复进行上述步骤就能走完所有的顶点了。 3.LeetCode题目 给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums = [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: 输入:nums = [-1,-100,3,99], k = 2 输出:[3,99,-1,-100] 解释: 向右轮转 1 步: [99,-1,-100,3] 向右轮转 2 步: [3,99,-1,-100] 4.解法 我们用下面的例子更具体地说明这个过程: nums = [1, 2, 3, 4, 5, 6] k = 2 5.代码实现 leetcode超时,但是思路对,删除最后一个,把最后删除的那个元素添加到数组的最前面 <script> for (var i = 0; i < k; i++) { var p = nums.pop(); nums.unshift(p); } return nums; </script> 这个是又更改算法了 <script> var rotate = function(nums, k) { if (k > 0) { var arr = []; for (var i = 0; i < nums.length; i++) { arr[i] = nums[i]; } for (var i = 0; i < nums.length; i++) { nums[(i + k) % arr.length] = arr[i]; } return nums; } } console.log(rotate([1, 2, 3, 4, 5, 6, 7], 3)); </script> 思路还是很多,翻转数组还是增加数组或者删除数组都可以做到。 以上就是关于“JS旋转数组是什么,环状替换如何理解”的介绍了,感谢各位的阅读。 (编辑:银川站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |