题目链接:leetcode-cn.com/problems/ro…
题目描述
给你一个数组,将数组中的元素向右轮转 k
**个位置,其中 k
**是非负数。
示例1:
输入: nums = [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:
输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]
解题
-
翻转整个数组
-
翻转前k-1个数组元素
-
翻转k之后的数组元素
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function(nums, k) {
// k需要取模,防止超过数组长度
k %= nums.length;
// 翻转函数
let reverse = (i, j) => {
while(i <j) {
let temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
i++;
j--;
}
}
reverse(0, nums.length-1);
reverse(0, k-1);
reverse(k, nums.length-1);
};
总结
该题目比较难想,记住套路多练习。 算法修炼github:github.com/mengmengzp/…