美文网首页前端100问
【前端100问】Q77:算法题「旋转数组」

【前端100问】Q77:算法题「旋转数组」

作者: alanwhy | 来源:发表于2021-02-11 09:58 被阅读0次

    写在前面

    此系列来源于开源项目:前端 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);
    

    相关文章

      网友评论

        本文标题:【前端100问】Q77:算法题「旋转数组」

        本文链接:https://www.haomeiwen.com/subject/dvnlxltx.html