初级算法(第三题)
给定一个数组,将数组中的元素向右移动 k **个位置,其中 k **是非负数。
示例
输入: 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]
解题思路
题目要求将元素向右移动 k 个位置,那么我们就可以循环数组将每一项都放在移动后的位置,
我们用(i + k) % length 作为移动后的下标位置,超出数组长度就从头开始
我们需要一个新的数组来作为操作数组,然后将取到的值放到原数组移动后位置。
为什么要创建新数组,直接用原数组不可以吗?
答:如果用原数组的话会混乱掉,因为每次你改变了原数组就会取不到原始数据的值了,所以要有一个不会
混乱掉的新数组
话不多数上代码
var rotate = function(nums, k) {
let length = nums.length;
let array = new Array(length);
for(let i = 0; i<length; i++){
array[i] = nums[i];
};
for(let i = 0; i<length; i++){
nums[(i+k)%length] = array[i];
}
};