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

Java evenSum方法大区间执行超时,如何优化循环逻辑?

优化evenSum方法的性能问题

你的问题出在循环累加的方式——当处理超大数值范围时,循环要执行数百万甚至上亿次,必然导致超时。用等差数列求和公式可以把时间复杂度降到O(1),彻底解决性能问题。

优化思路

两个整数间的偶数构成一个公差为2的等差数列,直接用等差数列求和公式计算即可,无需循环:

  1. 确定数列的第一个偶数a1:若from是奇数则+1,否则直接取from;若调整后的a1大于to,说明范围内无偶数,返回0。
  2. 确定数列的最后一个偶数an:若to是奇数则-1,否则直接取to。
  3. 计算数列的项数n:(an - a1) / 2 + 1
  4. 求和公式:n * (a1 + an) / 2

优化后的代码

public static long evenSum(int from, int to) {
    if (from > to) {
        return -1L;
    }

    // 确定第一个偶数
    int a1 = from;
    if (a1 % 2 != 0) {
        a1++;
    }
    // 若第一个偶数超过to,说明没有偶数,返回0
    if (a1 > to) {
        return 0L;
    }

    // 确定最后一个偶数
    int an = to;
    if (an % 2 != 0) {
        an--;
    }

    // 计算项数和总和
    long n = (an - a1) / 2 + 1;
    return n * (a1 + an) / 2;
}

验证示例

  • evenSum(4, 6):a1=4,an=6,n=(6-4)/2+1=2,总和=2*(4+6)/2=10,符合预期。
  • evenSum(10, 15):a1=10,an=14,n=(14-10)/2+1=3,总和=3*(10+14)/2=36,符合预期。
  • evenSum(4, 4):a1=4,an=4,n=1,总和=1*(4+4)/2=4,符合预期。
  • evenSum(5,5):a1=6>5,返回0,正确(5不是偶数)。

性能对比

原代码的时间复杂度是O(N)(N为偶数的个数),优化后是O(1),无论输入范围多大,都能在常数时间内完成计算,彻底解决超时问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:43:11