189. Rotate Array
2026/1/12大约 1 分钟约 380 字
189. Rotate Array
难度: Medium
题目描述
Given an integer array nums, rotate the array to the right by k steps, where k is non-negative.
Example 1:
Input: nums = [1,2,3,4,5,6,7], k = 3 Output: [5,6,7,1,2,3,4] Explanation: rotate 1 steps to the right: [7,1,2,3,4,5,6] rotate 2 steps to the right: [6,7,1,2,3,4,5] rotate 3 steps to the right: [5,6,7,1,2,3,4]
Example 2:
Input: nums = [-1,-100,3,99], k = 2 Output: [3,99,-1,-100] Explanation: rotate 1 steps to the right: [99,-1,-100,3] rotate 2 steps to the right: [3,99,-1,-100]
Constraints:
1 <= nums.length <= 105-231 <= nums[i] <= 231 - 10 <= k <= 105
Follow up:
- Try to come up with as many solutions as you can. There are at least three different ways to solve this problem.
- Could you do it in-place with
O(1)extra space?
解题思路
代码实现
解决方案
java
class Solution {
public void rotate(int[] nums, int k) {
//1. k = k%nums.length;
//2. 翻转数组
//3. 翻转前k个元素
//4.翻转剩下的元素
int len = nums.length;
int rK = k % len;
rotateArray(nums, 0, len - 1);
rotateArray(nums, 0, rK - 1);
rotateArray(nums, rK, len - 1);
}
private void rotateArray(int[] nums, int start, int end) {
int len = nums.length;
if (start < 0 || end < 0 || start >= len || end >= len) {
return;
}
if (start >= end) {
return;
}
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
}