题目

思路

代码
function rotate1(arr: number[], k: number): number[] {
const length = arr.length
if (!k || length === 0) return arr
const step = Math.abs(k % length)
for (let i = 0; i < step; i++) {
const n = arr.pop()
if (n!=null) {
arr.unshift(n)
}
}
return arr
}
function rotate2(arr: number[], k: number): number[]{
const length = arr.length
if (!k || length === 0) return arr
const step = Math.abs(k % length)
const part1 = arr.slice(-step);
const part2 = arr.slice(0, length - step);
const part3 = part1.concat(part2)
return part3
}
const arr = [1, 2, 3, 4, 5, 6, 7]
const arr1 = rotate1(arr, 3)
const arr2 = rotate2(arr, 3)
console.info(arr1)
console.info(arr2)
const arr3:number[] = []
for (let i = 0; i < 10 * 10000; i++){
arr3.push(i)
}
console.time('rotate1')
rotate1(arr3, 9 * 10000)
console.timeEnd('rotate1')
const arr4:number[] = []
for (let i = 0; i < 10 * 10000; i++){
arr4.push(i)
}
console.time('rotate2')
rotate2(arr4, 9 * 10000)
console.timeEnd('rotate2')
复杂度分析

答案
function rotate(arr: number[], k: number): number[]{
const length = arr.length
if (!k || length === 0) return arr
const step = Math.abs(k % length)
const part1 = arr.slice(-step)
const part2 = arr.slice(0, length - step)
const part3 = part1.concat(part2)
return part3
}

重点:
