189. Rotate Array
题目简介
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
题目给我们一个数字数组 nums 以及一个数字 k
要求我们在本地旋转 nums 的元素 k 次,每次旋转一位
解题思路
我们以 nums = [1,2,3,4,5,6,7], k = 3 为例
我们只需要分成三步:
- 把整个数组反转:
nums = [7,6,5,4,3,2,1] - 把
0~k-1反转:nums = [5,6,7,4,3,2,1] - 把
k~nums.length-1反转:nums = [5,6,7,1,2,3,4]
完成~
Javascript
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function(nums, k) {
const len = nums.length
k = k % len
if(k === 0) {
return
}
const reverse = (left, right) => {
while(left < right) {
;[nums[left], nums[right]] = [nums[right], nums[left]]
left++
right--
}
}
reverse(0, len-1)
reverse(0, k-1)
reverse(k, len-1)
};