Title:Rotate Array 189
Difficulty:Easy
原题leetcode地址:https://leetcode.com/problems/rotate-array/
1. 详细讲解见代码注释,时间&空间复杂度如下:
时间复杂度:O(n),最长需要遍历整个数组的长度。
空间复杂度:O(1),没有额外申请空间。
/**
* 3次反转
* 1. 反转K之前的数
* 2. 反转K之后的数
* 3. 反转整个数组
* 注意:题目给的K的大小可能比nums的长度大
* @param nums
* @param k
*/
public static void rotate(int[] nums, int k) {
int kk = k % nums.length;
reverse(nums, 0, nums.length - kk - 1);
reverse(nums, nums.length - kk, nums.length - 1);
reverse(nums, 0, nums.length - 1);
}
private static void reverse(int nums[], int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}