找出相同数字的最大连续子序列个数
找出相同数字的最长连续子序列
输入格式:
输入一个以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);
}
}
破案了,是老师自己程序有误,这是能跑过的代码。