题目链接
轮转数组
题目描述
注意点
- 使用空间复杂度为 O(1) 的 原地 算法解决这个问题
解答思路
- 本题有多种思路,一种是复制nums数组,然后将k个位置后的值赋值给当前位置即可,但是空间复杂度为O(n)
- 还有一种思路是先将整个数组进行翻转,再将(0, k - 1)和(k, n)之间的数组各自进行翻转,最后得到的数组就是结果
代码
class Solution {public void rotate(int[] nums, int k) {int n = nums.length;k = k % n;reverse(nums, 0, n - 1);reverse(nums, 0, k - 1);reverse(nums, k, n - 1);}public void reverse(int[] nums, int start, int end) {while (start < end) {int tmp = nums[start];nums[start] = nums[end];nums[end] = tmp;start++;end--;}}
}
关键点
- 先将整个数组进行翻转,将后面k个数字移动前方,前面n - k个数字移到后方,再将这两部分分别进行翻转,保证顺序不变