达杰瑞如归 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 yolov8边框坐标
  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真