达杰瑞如归 2021-09-15 23:07 采纳率: 100%
浏览 224
已结题

相同数字的最大连续子序列个数

找出相同数字的最大连续子序列个数

img

找出相同数字的最长连续子序列
输入格式:
输入一个以0结束的整数序列
输出格式:
输出序列中相同数字组成的最长连续子序列的长度
输入样例:
在这里给出一组输入。例如
  24488882440
  ①结尾无空行
输出样例
在这里给出相应的输出。例如:
  4
  ①结尾无空行
import java.util.Scanner;
import java.util.ArrayList;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList<Integer> list = new <Integer>ArrayList();
        do{
            list.add(input.nextInt());
        }while((int)list.get(list.size()-1) != 0);//获取数字序列
        
        int count = 1;//计数器
        int cnt = 1;//相同数字子序列最大的个数

        for(int i = 0;i < list.size()-2;i++){
            if(list.get(i).equals(list.get(i+1)))
                count++;//如果一个数和后一个数相等,计数器加1
              else {
            if (cnt < count)
                cnt = count;//如果计数器大于最大连续子序列个数,将计数器的值赋给它。
            count = 1;//计数器置1
              }
        }

        System.out.println(cnt);
    }
}

以上是我的方法,但测试结果是答案错误。。只能通过一部分的测试用例。。实在找不出来有什么错误,有没有哪位知道的?

  • 写回答

3条回答 默认 最新

  • 关注

    找到问题了,如果最长序列出现在结尾,如: 1 1 1 1 1 0
    你的程序在比对最后一组的时候,因为你只扫到list.length-2,也就是说最后一次比对是最后两个1相比,此时如果两个值相等,那么你的程序就不会对cnt进行更新
    你可以自己跑一下,如果最长序列出现在尾部,则你的程序会出错
    修改也很简单,你比对的时候把0也放进去,因为数列里面没有0,所以和0的比对必然引发一次else检查,这样就能把数列尾部的长度正确计数了
    修改后代码如下(注意for循环范围的变化)
    有帮助望采纳

    import java.util.Scanner;
    import java.util.ArrayList;
    public class Main {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            ArrayList<Integer> list = new <Integer>ArrayList();
            do{
                list.add(input.nextInt());
            }while((int)list.get(list.size()-1) != 0);//获取数字序列
            int count = 1;//计数器
            int cnt = 1;//相同数字子序列最大的个数
            for(int i = 0;i < list.size()-1;i++){//将0加入比对序列
                if(list.get(i).equals(list.get(i+1)))
                    count++;//如果一个数和后一个数相等,计数器加1
                  else {
                if (cnt < count)
                    cnt = count;//如果计数器大于最大连续子序列个数,将计数器的值赋给它。
                count = 1;//计数器置1
                  }
            }
            System.out.println(cnt);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月16日
  • 已采纳回答 9月16日
  • 创建了问题 9月15日

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料