文章目录
一、题目
描述:给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
示例1:
示例2:
提示:
二、题解
错误思路
var rotate = function(nums, k) {
let j = nums.length
while (k > 0) {
let temp = nums[j - 1]
for (let i = j-1; i>=0; i--) {
nums[i] = nums[i-1]
}
nums[0] = temp
k--
}
return nums
};
console.log(rotate([1, 2, 3, 4, 5, 6, 7], 3))
输出:[ 5, 6, 7, 1, 2, 3, 4]
正确思路
方法1
思路:
// 使用额外数组
var rotate = function(nums, k) {
let l = nums.length
// 实例化array,给新数组添加9个占位
let array = new Array(l)
// 将数填入到新的数组当中
for (let i = 0; i < l; i++) {
// 3除9=3,9除9=0,11除9=2
array[(i+k)%l] =nums[i]
}
// 将所有数从新数组添加到nums中
for (let i = 0; i < l; i++) {
nums[i]=array[i]
}
};
方法2
思路:假设数组为[1, 2, 3, 4, 5, 6, 7, 8, 9]需要轮转3次
//翻转数组
var rotate = function(nums, k) {
const reverse = (nums, start, end) => {
while (start < end) {
const temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start += 1;
end -= 1;
}
}
k %= nums.length;
reverse(nums, 0, nums.length - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, nums.length - 1);
console.log(nums)
}