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

LeetCode中Dart实现寻找两个有序数组中位数遇RangeError求助

问题分析与修复

错误原因

  1. 索引越界问题:当两个数组总长度为奇数时,你使用(nums3.length / 2).ceil()计算中间索引,但Dart列表采用0基索引。例如总长度为1时,(1/2).ceil()返回1,而列表仅有的元素索引是0,直接访问nums3[1]就会触发RangeError。
  2. 遗漏排序步骤:题目要求计算两个有序数组的中位数,但你的代码只是简单合并两个数组,没有对合并后的数组进行排序。如果输入的两个有序数组是交错的(比如nums1=[3], nums2=[1]),合并后的数组是无序的,会导致计算出错误的中位数。

修复后的代码

class Solution {
  double findMedianSortedArrays(List<int> nums1, List<int> nums2) {
    double median = 0;
    List<int> nums3 = [...nums1, ...nums2]..sort(); // 合并后排序
    int totalLength = nums3.length;
    if (totalLength % 2 == 0) {
      int mid = totalLength ~/ 2;
      median = (nums3[mid] + nums3[mid - 1]) / 2;
    } else {
      int mid = totalLength ~/ 2; // 整数除法直接得到0基中间索引
      median = nums3[mid].toDouble();
    }
    return median;
  }
}

关键修改说明

  • 合并数组时使用扩展运算符[...nums1, ...nums2]更简洁,随后调用sort()确保合并后的数组有序,符合题目要求。
  • 奇数长度场景下,用整数除法totalLength ~/ 2直接获取正确的0基中间索引,避免ceil带来的索引越界问题。
  • 统一用totalLength代替重复计算m+n或nums3.length,提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:25:43