【前端100问】Q77:算法题「旋转数组」
2021-02-11 本文已影响0人
alanwhy
写在前面
此系列来源于开源项目:前端 100 问:能搞懂 80%的请把简历给我
为了备战 2021 春招
每天一题,督促自己
从多方面多角度总结答案,丰富知识
算法题「旋转数组」
简书整合地址:前端 100 问
正文回答
题目
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
输入: [1, 2, 3, 4, 5, 6, 7] 和 k = 3
输出: [5, 6, 7, 1, 2, 3, 4]
解释:
向右旋转 1 步: [7, 1, 2, 3, 4, 5, 6]
向右旋转 2 步: [6, 7, 1, 2, 3, 4, 5]
向右旋转 3 步: [5, 6, 7, 1, 2, 3, 4]
输入: [-1, -100, 3, 99] 和 k = 2
输出: [3, 99, -1, -100]
解释:
向右旋转 1 步: [99, -1, -100, 3]
向右旋转 2 步: [3, 99, -1, -100]
回答
因为步数有可能大于数组长度,所以要先取余
function rotate(arr, k) {
const len = arr.length
const step = k % len
return arr.slice(-step).concat(arr.slice(0, len - step))
}
// rotate([1, 2, 3, 4, 5, 6], 7) => [6, 1, 2, 3, 4, 5]
var arr = [-1, -100, 3, 99];
var k = 5;
for (let i = 0; i < k; i++) {
let val = arr.pop();
arr.unshift(val);
}
console.log(arr);