题目描述
思路
1. 非原地,另开空间
2. 原地,分多次反转数组
代码
- 注意要先将
k给取余数,相当于把整个数组循环整数次后,剩下的旋转个数。
class Solution {
public void rotate(int[] nums, int k) {
int n = k % nums.length; // 注意
reverse(nums, 0, nums.length - 1);
reverse(nums, 0, n - 1);
reverse(nums, n, nums.length - 1);
}
public void reverse(int[] nums, int start, int end) {
int i = start, j = end;
while (i < j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
i++;
j--;
}
}
}