这题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");
		}
		

	}

}