题解 | #电影院选座问题#
缺失的第一个正整数
http://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5
疫情逐步缓和后,电影院终于开业了,但是由于当前仍处于疫情期间,应尽量保持人群不聚集的原则。 所以当小易来电影院选定一排后,尽量需要选择一个远离人群的位置。 已知由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);
}
}