LeetCode - 189 - 旋转数组(rotate-array)

栏目: IT技术 · 发布时间: 5年前

内容简介:LeetCode - 189 - 旋转数组(rotate-array)

Create by jsliang on 2019-07-08 11:44:01
Recently revised in 2019-07-08 13:53:47

一 目录

不折腾的前端,和咸鱼有什么区别

| 目录 | | --- | | 一 目录 | | 二 前言 | | 三 解题 | |  3.1 解法 - 逐步移动 | |  3.2 解法 - 一次到位 |

二 前言

  • 难度:简单

  • 涉及知识:数组

  • 题目地址:https://leetcode-cn.com/problems/rotate-array/

  • 题目内容

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

  2. 示例 1:

  3. 输入: [1,2,3,4,5,6,7] k = 3

  4. 输出: [5,6,7,1,2,3,4]

  5. 解释:

  6. 向右旋转 1 步: [7,1,2,3,4,5,6]

  7. 向右旋转 2 步: [6,7,1,2,3,4,5]

  8. 向右旋转 3 步: [5,6,7,1,2,3,4]

  9. 示例 2:

  10. 输入: [-1,-100,3,99] k = 2

  11. 输出: [3,99,-1,-100]

  12. 解释:

  13. 向右旋转 1 步: [99,-1,-100,3]

  14. 向右旋转 2 步: [3,99,-1,-100]

  15. 说明:

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

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

三 解题

小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。

3.1 解法 - 逐步移动

  • 解题代码

  1. var rotate = function(nums, k) {

  2. for (let i = 0; i < k; i++) {

  3. nums.unshift(nums.pop());

  4. }

  5. return nums;

  6. };

  • 执行测试

  1. nums: [1,2,3,4,5,6,7]

  2. k: 3

  3. return: [5,6,7,1,2,3,4]

  • LeetCode Submit

  1. Accepted

  2. 34/34 cases passed (124 ms)

  3. Your runtime beats 67.01 % of javascript submissions

  4. Your memory usage beats 20.6 % of javascript submissions (35.7 MB)

  • 知识点

  1. unshift(): unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度。 unshift() 详细介绍

  2. pop(): pop() 方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。 pop() 详细介绍

  • 解题思路

这里的思路就是逐步推进:

  1. 将数组尾部的数字通过 pop() 给推出来

  2. 往数组头部通过 unshift() 插入数字

  3. 这样形成了一次旋转

以此往复, k 的值为多少,就旋转几次。

3.2 解法 - 一次到位

  • 解题代码

  1. var rotate = function(nums, k) {

  2. if (k) {

  3. nums.unshift(...nums.splice(nums.length - k, k))

  4. }

  5. return nums;

  6. };

  • 执行测试

  1. nums: [1,2,3,4,5,6,7]

  2. k: 3

  3. return: [5,6,7,1,2,3,4]

  • LeetCode Submit

  1. Accepted

  2. 34/34 cases passed (96 ms)

  3. Your runtime beats 90.45 % of javascript submissions

  4. Your memory usage beats 78.3 % of javascript submissions (35.1 MB)

  • 知识点

  1. unshift(): unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度。 unshift() 详细介绍

  2. splice(): splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。 splice() 详细介绍

  • 解题思路

相比于逐步推进,那么这次解法就是一次到位了。

splice(开始坐标,剪切长度) 中,我们的开始坐标是:nums.length-k

假如:[1,2,3,4,5,6,7],那么就是 7-3=4 了,

我们的剪切长度即是 k 的长度。

这样,我们就通过两种解法解决了这道题,如果小伙伴们还有其他题解,欢迎评论留言~


不折腾的前端,和咸鱼有什么区别!

LeetCode - 189 - 旋转数组(rotate-array)

jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。

扫描上方二维码,关注 jsliang 的公众号,让我们一起折腾!

LeetCode - 189 - 旋转数组(rotate-array)

jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。



以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Haskell School of Expression

The Haskell School of Expression

Paul Hudak / Cambridge University Press / 2000-01 / USD 95.00

Functional programming is a style of programming that emphasizes the use of functions (in contrast to object-oriented programming, which emphasizes the use of objects). It has become popular in recen......一起来看看 《The Haskell School of Expression》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具