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

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

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);
    }
}

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

找到问题了,如果最长序列出现在结尾,如: 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);
    }
}

int count =1;
        int num =1;
        for(int i=1;i<arrs.length;i++){
            if (arrs[i] == arrs[i-1]){
                count++;
            }else{
                num = Math.max(num,count);
                count = 1;
            }
        }
        num = Math.max(num,count);

```

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
               int lat = input.nextInt();
        int pre = lat;
        int count = 0,cnt = 0;
        while(lat != 0){
            if(pre == lat)
                count++;
            else{
                if(count > cnt)
                    cnt = count;
                count = 1;
            }
            pre = lat;
            lat = input.nextInt();
        }
        if(count > cnt)
            cnt = count;
        System.out.println(cnt);
    }
}

破案了,是老师自己程序有误,这是能跑过的代码。