写点什么

LeetCode 题解:189. 旋转数组,3 次翻转,JavaScript,详细注释

用户头像
Lee Chen
关注
发布于: 2020 年 08 月 04 日
LeetCode题解:189. 旋转数组,3次翻转,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/rotate-array/



解题思路:



建议参考漫画:三次旋转的方法是如何想到的,这样思路会比单纯看文字清晰很多。



```javascript []

/**

* @param {number[]} nums

* @param {number} k

* @return {void} Do not return anything, modify nums in-place instead.

*/

var rotate = function(nums, k) {

// 该题有一个隐藏条件,k实际上可以大于nums.length.

// 此时需要按照k % nums.length进行翻转,因此需要增加处理。

k = k % nums.length;



// 翻转链表函数,将start到end的值进行翻转

function reverse(arr, start, end) {

// 当end指针小等于start的时候停止循环。

while (start < end) {

// 使用双指针,每次循环将两个指针的值调换。

let temp = arr[start];

arr[start] = arr[end];

arr[end] = temp;

// 调换完成之后,将两个指针向内移动。

start++;

end--;

}

}

// 第一次将整个数组翻转,此时数组的前后部分对调了位置。

// [1,2,3,4,5,6,7]变成了[7,6,5,4,3,2,1]

reverse(nums, 0, nums.length - 1);

// 第二次翻转0到k-1的部分

// [7,6,5,4,3,2,1]变成了[5,6,7,4,3,2,1]

reverse(nums, 0, k - 1);

// 第二次翻转0到k-1的部分

// [5,6,7,4,3,2,1]变成了[5,6,7,1,2,3,4]

reverse(nums, k, nums.length - 1);

};

```



发布于: 2020 年 08 月 04 日阅读数: 52
用户头像

Lee Chen

关注

还未添加个人签名 2018.08.29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:189. 旋转数组,3次翻转,JavaScript,详细注释