这题01序列
我们需要判断是否能够满足将n个0变成1,且不改变规则
通过分析题目,可以发现。这里有三种情况,一种是0串在开头,一种是0串在结尾,还有就是0串在中间
每一种情况能够满足的最多1个数不一样
在中间的话,奇数直接除2,偶数除2减一
在起始和结尾,奇数直接除2,偶数也是直接除2
然后我们需要统计每一个0串的长度,如果长度大于1,我们就将它统计到集合中
这里要格外注意的是,处理结尾0串时,到最后一个数,也要执行将其装入集合的操作
然后就是按照我们前面提到的规律,遍历集合即可
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 需要特判0在起始和结尾
// 在中间的话,奇数直接除2,偶数除2减一
// 在起始和结尾,奇数直接除2,偶数也是直接除2
Scanner scanner=new Scanner(System.in);
int m=scanner.nextInt();
int a[]=new int[m];
int count=0;
int len=0;
ArrayList<Integer> list=new ArrayList<>();
for (int i = 0; i < a.length; i++) {
a[i]=scanner.nextInt();
if(a[i]==0)len++;
if(a[i]==1||i==a.length-1) {
if(len>1) {
list.add(len);
}
len=0;
}
}
int n=scanner.nextInt();
for(int i=0;i<list.size();i++) {
if(i==0&&a[0]==0) {
count+=list.get(i)/2;
}else if(i==list.size()-1&&a[a.length-1]==0) {
count+=list.get(i)/2;
}else {
int x=list.get(i);
if(x%2==0) {
count+=x/2-1;
}else{
count+=x/2;
}
}
}
if(count<n) {
System.out.println("false");
}else {
System.out.println("true");
}
}
}



京公网安备 11010502036488号