疫情逐步缓和后,电影院终于开业了,但是由于当前仍处于疫情期间,应尽量保持人群不聚集的原则。 所以当小易来电影院选定一排后,尽量需要选择一个远离人群的位置。 已知由0和1组成的数组表示当前排的座位情况,其中1表示已被选座,0表示空座 请问小易所选座位和最近人的距离座位数最大是多少? 有如下假设:至少有一个人已选座,至少有一个空座位,且座位数限制为2<=length<=1000

思路:1.寻找连续0字符串的最大长度m,对应最大间隔为(m+1)/2

2.左右边界0字符串的最大长度,分别为left,right

3.比较三者之间的最大值

import java.util.*;
public class Main{
    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        String s=sc.nextLine().replace(" ","");
        int n=s.length();
        char[] res=new char[n];
        res=s.toCharArray();
        int left=0;//左边界0数组的长度
        for(int i=0;i<n;i++){
            if(res[i]=='0'){
                left++;
            }else{
                break;
            }
        }
        int right=0;//右边界0数组的长度
         for(int i=n-1;i>=0;i--){
            if(res[i]=='0'){
                right++;
            }else{
                break;
            }
        }
        int m=1;//初始最大连续字符串长度
       //找数组中间0数组的最大长度
        int count=0;
        for(int i=1;i<n-1;i++){
            if(res[i]=='0'){
                count++;
            }else{
                if(count>=m){
                    m=count;
                }
                count=0;
            }
            m=Math.max(count,m);//最大连续0字符串长度
        }
        int max=(m+1)/2;//最长数组在中间时
        max=Math.max(Math.max(max,left),right);
        System.out.println(max);
    }
}