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

优化计算最长递减奇数序列和的代码

优化思路与代码重构

原代码的核心需求是计算由连续奇数组成的递减子序列的最大和,遇到偶数则中断当前子序列(重置当前和)。原代码存在分支嵌套过深、重复逻辑过多的问题,以下是具体优化方案:

优化步骤

  • 合并重复的sum累加与sumMax更新逻辑,消除代码冗余
  • 简化分支判断,减少嵌套层级,提升代码可读性
  • 统一处理首元素与后续元素的逻辑,无需单独区分i==0的场景

重构后的代码

int sumMax = 0;
int currentSum = 0;

for (int i = 0; i < array.Length; i++)
{
    int num = array[i];
    // 遇到偶数,重置当前子序列和
    if (num % 2 == 0)
    {
        currentSum = 0;
        continue;
    }

    // 判断是否能加入当前递减序列
    bool canExtendSequence = i == 0 || currentSum == 0 || array[i-1] > num;
    
    if (canExtendSequence)
    {
        currentSum += num;
    }
    else
    {
        // 无法延续序列,以当前数作为新子序列起点
        currentSum = num;
    }
    
    // 统一更新最大和
    sumMax = Math.Max(sumMax, currentSum);
}

return sumMax;

更紧凑的简化版本

int sumMax = 0;
int currentSum = 0;

for (int i = 0; i < array.Length; i++)
{
    int num = array[i];
    if (num % 2 == 0)
    {
        currentSum = 0;
        continue;
    }

    // 不满足递减延续条件时,重置当前和为当前数
    if (i != 0 && currentSum != 0 && array[i-1] <= num)
    {
        currentSum = num;
    }
    else
    {
        currentSum += num;
    }

    sumMax = Math.Max(sumMax, currentSum);
}

return sumMax;

优化点说明

  1. 消除重复逻辑:将所有更新sum和sumMax的操作统一处理,避免多次重复相同代码
  2. 减少嵌套层级:把多层嵌套的if-else拆分为扁平判断,代码可读性大幅提升
  3. 简化比较逻辑:用Math.Max替代原代码中if (sumMax < sum)的分支,代码更简洁
  4. 统一场景处理:不再单独区分首元素,将其逻辑整合到通用判断中

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

相关产品推荐
方舟 Agent Plan

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

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