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

LeetCode 189. Rotate Array代码提交报错但控制台输出正确求助

解决LeetCode 189. Rotate Array提交错误的问题

你的代码控制台输出正确,但提交后判题失败,核心问题有两个:

  1. 参数传递逻辑错误:Java中数组参数传递的是引用副本,你在方法里执行nums = new int[arr.length];后,方法内的nums变量指向了新创建的数组,但外部传入的原数组引用完全没被修改——LeetCode判题系统只会检查原数组的状态,所以你的修改根本没生效。
  2. 未处理k超出数组长度的情况:比如数组长度为3、k=4时,l-k会变成负数,直接导致循环索引越界。

修正方案一:复用原数组(额外空间O(n))

把新数组的内容复制回原数组,同时处理k的边界情况:

import java.util.Arrays;

class Solution {
  public void rotate(int[] nums, int k) {
    int l = nums.length;
    k = k % l; // 处理k大于数组长度的情况
    if (k == 0) return; // 无需旋转直接返回
    
    int[] arr = Arrays.copyOf(nums, l); // 复制原数组备份
    int idx = 0;
    
    // 把后k个元素移到前面
    for (int i = l - k; i < l; i++) {
        nums[idx++] = arr[i]; 
    }
    // 把前l-k个元素移到后面
    for (int i = 0; i < l - k; i++) {
        nums[idx++] = arr[i];
    }
  }
}

修正方案二:原地旋转(空间复杂度O(1),进阶最优解)

通过三次反转实现原地修改,不需要额外数组:

class Solution {
  public void rotate(int[] nums, int k) {
    int l = nums.length;
    k = k % l;
    if (k == 0) return;
    
    // 1. 反转整个数组
    reverse(nums, 0, l - 1);
    // 2. 反转前k个元素
    reverse(nums, 0, k - 1);
    // 3. 反转剩余的l-k个元素
    reverse(nums, k, l - 1);
  }
  
  // 辅助反转方法
  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--;
    }
  }
}

内容的提问来源于stack exchange,提问作者Abdulllah Aziz Shakkhor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:22:10