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

如何输出元素和最大的最长连续序列?Java代码优化求助

解决最大和连续子序列的最长匹配问题

原代码仅在子序列和更大时更新结果,未处理和相等但长度更长的场景。我们需要修改判断逻辑,在和相等时比较子序列长度,保留更长的那个。

修改后的代码

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(-5);
        list.add(6);
        list.add(-3);
        list.add(-13434);
        list.add(99);
        list.add(99);
        list.add(-444);
        list.add(-7444);
        list.add(100);
        list.add(90);
        list.add(8);
        
        if (list == null || list.size() == 0) {
            System.out.println("empty array");
            return;
        }

        int maxSumStartIndex = 0;
        int maxSumLastIndex = 0;
        int maxSum = list.get(0);
        // 记录当前最大子序列的长度
        int maxLength = maxSumLastIndex - maxSumStartIndex + 1;

        int lastSumStartIndex = 0;
        int lastSum = list.get(0);

        for (int i = 1; i < list.size(); i++) {
            lastSum += list.get(i);
            if (lastSum < list.get(i)) {
                lastSum = list.get(i);
                lastSumStartIndex = i;
            }

            // 计算当前子序列长度
            int currentLength = i - lastSumStartIndex + 1;
            // 修改判断逻辑:要么和更大,要么和相等但长度更长
            if (lastSum > maxSum || (lastSum == maxSum && currentLength > maxLength)) {
                maxSumStartIndex = lastSumStartIndex;
                maxSumLastIndex = i;
                maxSum = lastSum;
                maxLength = currentLength;
            }
        }

        System.out.println("sum( arr[" + maxSumStartIndex + "] .. arr[" + maxSumLastIndex + "] ) = " + maxSum);
        for (int i = maxSumStartIndex; i <= maxSumLastIndex; i++) {
            System.out.print(list.get(i) + " ");
        }
    }
}

关键修改说明

  • 新增maxLength变量,跟踪当前最大和子序列的长度,初始值为第一个元素的长度(1)。
  • 循环中计算当前子序列的长度currentLength,用于和maxLength对比。
  • 更新判断条件:
    1. 当当前子序列和大于已记录的最大和时,直接更新结果(和原逻辑一致)。
    2. 当和相等时,若当前子序列长度更长,则替换原有结果,更新索引和长度。

运行后会输出预期的100 90 8——它的和(198)与99,99的和相同,但长度(3)更长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:25:40