1. 首页

LeetCode 189. 旋转数组

题目描述

难度:Easy

相关话题:数组

给定一个数组,将数组中的元素向右移动k 个位置,其中k 是非负数。

示例 1:

输入: [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]

示例2:

输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]

说明:

  • 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。

  • 要求使用空间复杂度为O(1) 的原地算法。

/**
 * @ Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var rotate = function(nums, k) {
  function reverse(arr, begin, end) {
    while(begin < end){
      var temp = arr[begin]
      arr[begin] = arr[end]
      arr[end] = temp
      begin++
      end--
    }
  }
  var length = nums.length
  var mod = k % length
  if (mod === 0) {
    return
  }
  reverse(nums, length - mod, length -1)
  reverse(nums, 0, length - mod - 1)
  reverse(nums, 0, length - 1)
};

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:LeetCode 189. 旋转数组

链接:https://www.javascriptc.com/4536.html

« LeetCode 190. 颠倒二进制位
LeetCode 188. 买卖股票的最佳时机 IV»
Flutter 中文教程资源

相关推荐

QR code