目录
1,题目
给定一个整数数组 nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数。
2,代码
2.1我的代码
问题:超时
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function(nums, k) {
for(let i =0;i<k ;i++){
const num = nums.pop();
nums.unshift(num);
}
};
2.2翻转数组
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
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++;
end--;
}
}
k %= nums.length;
reverse(nums,0,nums.length - 1);
reverse(nums,0, k-1);
reverse(nums,k,nums.length-1);
};
nums = [1] k=2;
nums = [1,2] k =3;
k值的处理---关键处理语句
k %= nums.length;
2.3创建一个新数组
将原数组下标为 i 的元素放至新数组下标为 (i+k) mod n 的位置,最后将新数组拷贝至原数组即可。
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function(nums, k) {
const n = nums.length;
let arrs = new Array(n);
for(let i =0;i<n;i++){
arrs[(i+k)%n] = nums[i];
}
for(let i = 0;i<nums.length;i++){
nums[i] = arrs[i];
}
};
3,学习与总结
积累翻转数组的思路 !