
class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
// 关键:处理 k >= n 的情况,旋转 n 步相当于没有旋转,取余简化操作
k = k % n;
if (k == 0)
return; // 无需旋转,直接返回
int[] temp = new int[n]; // 只需要一个临时数组,减少冗余
// 步骤1:将原数组末尾 k 个元素复制到临时数组的前 k 位
for (int i = 0; i < k; i++) {
temp[i] = nums[n - k + i]; // 修正索引,获取末尾第 k 个到第 1 个元素
}
// 步骤2:将原数组前 n-k 个元素复制到临时数组的后 n-k 位
for (int i = 0; i < n - k; i++) {
temp[k + i] = nums[i];
}
// 步骤3:将临时数组的内容复制回原始数组(关键:修改原始数组的内容,而非引用)
System.arraycopy(temp, 0, nums, 0, n);
}
}
两种 Python 实现(常规循环版、切片优化版)的时间复杂度均为 O(n)(n 为列表长度),核心操作次数随列表长度线性增长。