题解 | #电影院选座问题#

缺失的第一个正整数

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);
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
我:“加班需要有加班工资。”&nbsp;hr:“为什么?”&nbsp;哈哈哈哈哈哈哈离大谱
juntenor:你确实太理想化了,对社会不了解呀。这个和HR没有关系,这是国内特色,不然怎么还会有外包就这种逆天的存在呢。
点赞 评论 收藏
分享
头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务