题目来源于leetcode轮转数组
var rotate = function(nums, k) {
//小于0的数报错
if(k < 0){
throw Error('请传入一个非负数K')
}
//等于0等于不移动
if(k == 0 ){
return nums
}
//大于0的情况
//方法一、创造一个新数组方便我们移动的时候不改变原来的数组,最后用新数组重新给原来的数组赋值
const n = nums.length;
const newArr = new Array(n);
for (let i = 0; i < n; ++i) {
//轮转k个则会使得原来数组的第i+k个等于第i个
newArr[(i + k) % n] = nums[i];
}
for (let i = 0; i < n; ++i) {
nums[i] = newArr[i];
}
//方法二、利用数组的splice方法
const n = nums.length;
k = k%n
let newArr = nums.splice(0,k+1)
newArr = [...nums,...newArr]
for (let i = 0; i < n; ++i) {
nums[i] = newArr[i];
}
//方法三,双指针法轮转数组
const reverse = (arr,start,end) => {
while(start<end){
let temp = arr[start]
arr[start] = arr[end]
arr[end] = temp
start++
end--
}
}
let n = nums.length
k = k%n
reverse(nums,0,n - 1)
reverse(nums,0,k-1)
reverse(nums,k,n-1)
};