You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 189:数组旋转后修改无法保留的问题求助

问题原因

Java里数组是引用类型,但方法参数采用值传递——传递的是数组引用的副本。你在rotate方法里执行nums = newArr时,只是把方法内部的局部引用变量指向了新创建的数组,而main方法里原本的数组引用完全没被改动,所以原数组的内容自然不会有变化。

修复方案

要保持返回类型为void并修改原数组,不能直接给参数变量赋值新数组,而是要把新数组的元素拷贝到原数组的内存空间中。另外你的原代码存在循环逻辑错误:第一个循环的条件i <= k是错误的,应该遍历原数组前nums.length - k个元素,放到新数组的k位置开始;第二个循环逻辑是正确的,用于处理后k个元素并放到新数组开头。

修正后的代码如下:

public class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        k %= n;
        int[] newArr = new int[n];
        // 处理原数组前n-k个元素,放入新数组的k索引开始位置
        for(int i = 0; i < n - k; i++) {
            newArr[i + k] = nums[i];
        }
        // 处理原数组后k个元素,放入新数组的开头位置
        for(int i = n - k; i < n; i++) {
            newArr[i - (n - k)] = nums[i];
        }
        // 将新数组元素拷贝回原数组,覆盖原内容
        System.arraycopy(newArr, 0, nums, 0, n);
    }

    public static void main(String[] args) {
        int[] nums = {1,2,3,4,5,6,7};
        Solution sol = new Solution();
        sol.rotate(nums, 3);
        for(int i : nums) {
            System.out.println(i);
        }
    }
}

如果不想用System.arraycopy,也可以手动循环完成拷贝:

for (int i = 0; i < n; i++) {
    nums[i] = newArr[i];
}
可选优化:原地旋转(无需额外数组)

如果想避免开辟额外数组空间,可以采用三次翻转的原地解法:

  1. 翻转整个数组
  2. 翻转前k个元素
  3. 翻转后n-k个元素

代码示例:

public class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        k %= n;
        reverse(nums, 0, n - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, n - 1);
    }

    // 辅助方法:翻转数组中[start, end]区间的元素
    private void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start++;
            end--;
        }
    }

    public static void main(String[] args) {
        int[] nums = {1,2,3,4,5,6,7};
        Solution sol = new Solution();
        sol.rotate(nums, 3);
        for(int i : nums) {
            System.out.println(i);
        }
    }
}

内容的提问来源于stack exchange,提问作者Wiscoteju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:52:35