刷题小白遇到这一题:
发现一个有趣,但是不是最好的方法。因为这个方法的效率一般:
但是思路很有意思
如:
nums = [1,2,3,4,5,6,7]
k = 3
可以这么操作。
- 把数组整个反转,为: [7,6,5,4,3,2,1]
- 从0到k-1反转,为:[5,6,7,4,3,2,1]
- 从k到最后反转,为:[5,6,7,1,2,3,4]
代码如下
/**
* @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 ? k % nums.length : k;
reverse(nums, 0, nums.length - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, nums.length - 1);
};
function reverse(nums, i, j) {
while(i < j) {
swap(nums, i, j);
i++;
j--;
}
}
function swap(nums, i, j) {
let temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
题目
题目在这里https://leetcode-cn.com/probl...
有兴趣的同学可以去评论里面看看最高效的实现方式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。