双指针求区间最大值(849. 到最近的人的最大距离)

class Solution { 

    /*
    一般情况:直接求出俩个1区间的大小;
    特殊情况:0开始 ; 0结束
     */
     //基本思想:双指针 得到区间大小 同时对于特殊情况判断一下就好了

    public int maxDistToClosest(int[] seats) {
        int n = seats.length,pre = 0,ans = 0;
        for(int i = 0;i < n;i++){
            if(seats[i] == 1){
                if(pre == 0 && seats[pre] == 0){ //判断0开始的情况
                    ans = i - pre;
                }
                ans = Math.max(ans,(i - pre) / 2);
                pre = i;
            }
        }
        if(seats[n - 1] == 0){ //判断 0结束的情况
            ans = Math.max(ans,n - 1 - pre);
        }
        return ans;
        
    }
}
/*
想着还可以直接找距离最大的俩个人 距离除以二就好了,但是也可能只有一个人,这就难搞了。
突然想到一个法子:
我直接遍历每个点,双指针遇见0就变1 同时将范围扩大,遇见1或者到头了,就可以得到一个区间的大小,然后接着扩展区间。
也就是随便找到一个点0,双指针俩边扩展,得到此区间大小,然后接着往下一个区间测大小。最后取最大区间。但是到头的咋搞?

暴力法:我直接遍历每个0点,看他距离最近的人距离,最后得到最大值,时间复杂度就是遍历每个点n,在每个点基础上左右遍历最大就是n 最小1 那么总的时间复杂度O(nlogn) n已经是4级别 不行了。
咋优化?
我去 干嘛这样想
 */

你可能感兴趣的:(算法笔记,算法,数据结构)