🎇题目描述:
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
🎇数据范围:
- 1 <= nums.length <=
- <= nums[i] <= - 1
- 0 <= k <=
🎇方法1:
使用辅助数组记录移出的元素,然后再将元素移到开头。
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function(nums, k) {
let tk=k%nums.length;
let temp=[];
while(tk--){
temp.unshift(nums.pop());
}
nums.unshift(...temp);
};
unshift时间复杂度为。
时间复杂度:
空间复杂度:
🎇方法2:
使用splice方法,将数组后面的元素移动到数组前面。
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function(nums, k) {
let tk=k%nums.length;
nums.unshift(...nums.splice(nums.length-tk,tk));
}
时间复杂度:
空间复杂度:
🎗方法3:
先将整个数组反转,然后将前k个元素反转,再将后面的元素反转。
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var reverse=function(nums,start,end){
while(start<end){
let temp=nums[start];
nums[start]=nums[end];
nums[end]=temp;
start++;
end--;
}
}
var rotate = function(nums, k) {
let tk=k%nums.length;
reverse(nums,0,nums.length-1);
reverse(nums,0,tk-1);
reverse(nums,tk,nums.length-1);
};
时间复杂度:
空间复杂度: