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

为何SumRange触发IndexOutOfRangeException,SumRanges却正常运行?

前缀和函数索引越界问题分析

给定数组:

var nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

需实现计算区间[a,b]内元素和的前缀和函数,但两个实现中,SumRange触发System.IndexOutOfRangeException,SumRanges却能正常运行,原因如下:

报错的SumRange函数

int SumRange(int left, int right)
{
    return pre[right] - left >= 1 ? pre[left - 1] : 0;
}

正常运行的SumRanges函数

int SumRanges(int left, int right)
{
    int l = left >= 1 ? pre[left - 1] : 0;
    return pre[right] - l;
}

问题根源:运算符优先级错误

C#中运算符优先级从高到低排序:减法- > 关系运算符>= > 三元运算符?:。

在SumRange里,表达式pre[right] - left >= 1 ? pre[left - 1] : 0的执行顺序是:

  1. 先计算pre[right] - left
  2. 将计算结果与1比较
  3. 根据比较结果,若成立则返回pre[left-1],否则返回0

这意味着,当left=0时,只要pre[right]-0 >=1成立,就会执行pre[-1],直接触发索引越界异常——完全没按你预想的用left >=1来判断是否访问pre[left-1]。

而SumRanges的逻辑是先判断left >=1:

  • 只有left>=1时才会访问pre[left-1]
  • left<1时直接取0,从根源避免了访问非法索引pre[-1]的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:16:23