优化计算最长递减奇数序列和的代码
优化思路与代码重构
原代码的核心需求是计算由连续奇数组成的递减子序列的最大和,遇到偶数则中断当前子序列(重置当前和)。原代码存在分支嵌套过深、重复逻辑过多的问题,以下是具体优化方案:
优化步骤
- 合并重复的
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;
优化点说明
- 消除重复逻辑:将所有更新
sum和sumMax的操作统一处理,避免多次重复相同代码 - 减少嵌套层级:把多层嵌套的
if-else拆分为扁平判断,代码可读性大幅提升 - 简化比较逻辑:用
Math.Max替代原代码中if (sumMax < sum)的分支,代码更简洁 - 统一场景处理:不再单独区分首元素,将其逻辑整合到通用判断中
内容的提问来源于stack exchange,提问作者infelixPuer
相关产品推荐
相关产品推荐

