力扣轮转数组
时间: 2025-07-08 17:44:40 浏览: 15
在解决 LeetCode 上的轮转数组问题时,需要考虑多个关键点,包括如何处理边界情况、如何避免额外的空间使用以及如何高效地进行元素移动。以下是几种常见的解法:
### 解法一:使用临时数组
这种方法的基本思路是将数组中最后 `k` 个元素存储到一个临时数组中,然后将原数组中的前面部分向右移动 `k` 个位置,最后将临时数组中的元素放回到原数组的前面。
```java
class Solution {
public void rotate(int[] nums, int k) {
int length = nums.length;
k = k % length; // 处理k大于数组长度的情况
int[] temp = new int[k];
// 将最后k个元素存储到临时数组中
for (int i = 0; i < k; i++) {
temp[i] = nums[length - k + i];
}
// 将原数组前面的元素向右移动k个位置
for (int i = length - 1; i >= k; i--) {
nums[i] = nums[i - k];
}
// 将临时数组中的元素放到原数组的前面
for (int i = 0; i < k; i++) {
nums[i] = temp[i];
}
}
}
```
这种方法的时间复杂度为 O(n),空间复杂度为 O(k)[^2]。
---
### 解法二:三次反转
这种解法不需要额外的空间,而是通过三次反转操作来实现数组的轮转。具体步骤如下:
1. 反转数组的后 `k` 个元素。
2. 反转数组的前 `n-k` 个元素。
3. 最后反转整个数组。
```c
void reverse(int* nums, int left, int right) {
while (left < right) {
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
left++;
right--;
}
}
void rotate(int* nums, int numsSize, int k) {
if (k > numsSize) {
k %= numsSize;
}
reverse(nums, numsSize - k, numsSize - 1); // 右边倒置
reverse(nums, 0, numsSize - k - 1); // 左边倒置
reverse(nums, 0, numsSize - 1); // 整体倒置
}
```
这种方法的时间复杂度为 O(n),空间复杂度为 O(1)[^3]。
---
### 解法三:直接计算新索引
这种方法利用了模运算来计算每个元素的新位置,并将其复制到新的数组中。之后再将新数组的内容复制回原数组。
```java
public class Solution {
public void rotate(int[] nums, int k) {
int length = nums.length;
int[] temp = new int[length];
// 将原数组的元素放到新数组中对应的位置
for (int i = 0; i < length; i++) {
temp[(i + k) % length] = nums[i];
}
// 将temp数组的内容复制回nums数组
for (int i = 0; i < length; i++) {
nums[i] = temp[i];
}
}
}
```
这种方法的时间复杂度为 O(n),空间复杂度为 O(n)[^4]。
---
### 解法四:数组切片(Python)
在 Python 中,可以利用数组切片来实现轮转数组的操作。然而需要注意的是,在函数内部修改数组时,必须直接对原数组进行操作,而不是创建一个新的数组引用。
```python
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n = len(nums)
k = k % n # 处理k大于数组长度的情况
nums[:] = nums[-k:] + nums[:-k]
```
这种方法的时间复杂度为 O(n),空间复杂度为 O(n)[^1]。
---
### 相关问题
1. 如何在不使用额外空间的情况下实现轮转数组?
2. 为什么在轮转数组问题中需要对 `k` 进行取模操作?
3. 在使用数组切片方法时,为什么不能直接赋值给 `nums` 而要使用 `nums[:]`?
4. 三次反转法的具体实现原理是什么?
5. 使用临时数组的方法和直接计算新索引的方法有什么区别?
阅读全文
相关推荐



















