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

求最长相同元素连续序列算法:Java代码存在问题求助

问题排查与修正

原代码存在的问题

  • 初始计数逻辑错误:currentSequence初始为0,且第一个元素仅赋值prev就跳过,导致第一个连续序列的计数少1。比如第一个测试用例中4连续出现4次,原代码计算出的currentSequence是3,而非正确的4。
  • 遗漏最后一个序列的检查:循环结束后,最后一段连续序列不会进入else分支进行最长序列比较,若最长序列在输入末尾,会被忽略。
  • 初始值未正确初始化:numOfLongestSequence初始为0,若输入中没有0且所有序列长度为1时,结果会错误显示0;longestSequence初始为1,但未绑定初始元素。

修正后的代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println("Search for longest sequence: ");
        Scanner s = new Scanner(System.in);
        
        // 处理空输入或直接输入0的边界情况
        if (!s.hasNextInt()) {
            System.out.println("No input provided.");
            s.close();
            return;
        }
        
        int value = s.nextInt();
        if (value == 0) {
            System.out.println("No valid elements.");
            s.close();
            return;
        }
        
        int prev = value;
        int numOfLongestSequence = prev;
        int longestSequence = 1;
        int currentSequence = 1;

        while (s.hasNextInt() && (value = s.nextInt()) != 0) {
            if (value == prev) {
                currentSequence++;
            } else {
                // 比较当前序列与最长序列
                if (currentSequence > longestSequence) {
                    longestSequence = currentSequence;
                    numOfLongestSequence = prev;
                }
                // 重置当前序列计数
                currentSequence = 1;
            }
            prev = value;
        }
        
        // 循环结束后,检查最后一段序列
        if (currentSequence > longestSequence) {
            longestSequence = currentSequence;
            numOfLongestSequence = prev;
        }

        System.out.println("Longest sequence: " + longestSequence + " times " + numOfLongestSequence);
        s.close();
    }
}

修正说明

  1. 提前处理初始输入:先读取第一个元素,判断输入是否为空或直接输入0的边界情况,避免后续逻辑出错。
  2. 初始化计数与结果变量:用第一个有效元素初始化prev、numOfLongestSequence,currentSequence和longestSequence初始为1,符合第一个元素的计数逻辑。
  3. 添加循环结束后的检查:确保最后一段连续序列也参与最长序列的比较,解决末尾序列被遗漏的问题。
  4. 关闭Scanner资源:避免资源泄漏。

测试用例验证

  • 测试用例1:4 4 4 4 3 3 3 4 6 6 6 0
    输出:Longest sequence: 4 times 4
  • 测试用例2:4 4 4 3 3 3 3 3 4 6 6 6 0
    输出:Longest sequence: 5 times 3
  • 测试用例3:4 4 333 333 4 3 -66 -66 -66 0
    输出:Longest sequence: 3 times -66

内容的提问来源于stack exchange,提问作者Karolina Woźniak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:10:36