1. 题目:
旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
1 | 输入: [1,2,3,4,5,6,7] 和 k = 3 |
示例 2:
1 | 输入: [-1,-100,3,99] 和 k = 2 |
说明:
- 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
- 要求使用空间复杂度为 O(1) 的原地算法。
2. 解题:
使用三次倒置,
第一次整个数组倒置;
以第k个元素为中心将数组分为两部分,
第二次前部分数组倒置;
第三次后部分数组倒置。
主要注意,当k > nums.length
时,需要对k
进行k = k % nums.length
处理。
1 | 假设数组 0 1 2 3 4 5 6 |
代码:
1 | class Solution { |
3. 其他解法:
1 | /** |