leetcode 849.到最近的人的最大距离

原题如下:

https://leetcode-cn.com/problems/maximize-distance-to-closest-person/
在这里插入图片描述

题解

方法一

此题的本质就是根据计算连续0的个数来计算出离最近距离的座位的最大值,但是需要分两种情况来考虑:首尾处的连续0的个数直接就是在这个区间里面离最近的人距离的最大值,在中间的时候,离最近的人距离的最大值就是连续0个数加1后再除以2的结果。
本思路java代码示例:

/*
 *@v7fgg
 *执行用时 :2 ms, 在所有 Java 提交中击败了99.01%的用户
 *内存消耗 :41.6 MB, 在所有 Java 提交中击败了11.11%的用户
 *2020年6月15日 12:16
 */
class Solution {
    public int maxDistToClosest(int[] seats) {
        //开头结尾最大的连续0个数,中间的加1后除以2
        int ans=0;
        int ansT=0;
        int firstOne=-1;//第一个1出现的位置
        //先考虑一下开头有0的情况
        for(int k=0;k<seats.length;k++){
            if(seats[k]==0){ansT++;}
            else{
                firstOne=k;
                ans=Math.max(ansT,ans);
                ansT=0;
                break;
            }
        }
        //再考虑不是头尾的连续0,也就是遇到1的时候要更新ans并置零ansT
        for(int i=firstOne;i<seats.length;i++){
            if(seats[i]==0){
          //这里已经考虑到了末尾的0,不过,在循环里面没有进行更新
                ansT++;
                
            }
            else{
                ans=Math.max((ansT+1)/2,ans);
                ansT=0;
            }
         //最后在返回句中更新末尾连续0    
        }return Math.max(ans,ansT);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱抱抱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值