1. 程式人生 > >力扣(LeetCode) 849. 到最近的人的最大距離

力扣(LeetCode) 849. 到最近的人的最大距離

希望 int end 運行 length star += public 至少 eat

在一排座位( seats)中,1 代表有人坐在座位上,0 代表座位上是空的。

至少有一個空座位,且至少有一人坐在座位上。

亞歷克斯希望坐在一個能夠使他與離他最近的人之間的距離達到最大化的座位上。

返回他到離他最近的人的最大距離。

示例 1:

輸入:[1,0,0,0,1,0,1]
輸出:2
解釋:
如果亞歷克斯坐在第二個空位(seats[2])上,他到離他最近的人的距離為 2 。
如果亞歷克斯坐在其它任何一個空位上,他到離他最近的人的距離為 1 。
因此,他到離他最近的人的最大距離是 2 。

示例 2:

輸入:[1,0,0,0]
輸出:3
解釋:
如果亞歷克斯坐在最後一個座位上,他離最近的人有 3 個座位遠。
這是可能的最大距離,所以答案是 3 。

提示:

1 <= seats.length <= 20000
seats 中只含有 0 和 1,至少有一個 0,且至少有一個 1。

Java版

class Solution {
    public int maxDistToClosest(int[] seats) {
        int start=-1;//連續0起始位置
        int end = -1;//連續0結束位置
        int max = 0; // 連續0數量
        int dis = 0;
        for(int i=0;i<seats.length;i++){
            if(seats[i]==0 && max==0) {
                max += 1;
                start = i;
            }else if(seats[i]==0 && max!=0){
                max += 1;
                end = i;
            }else {
                if(start == 0 && max > 0) {
                    dis = max;
                }else if(end == seats.length-1 && max > 0) {
                    dis = dis>max?dis:max;
                }else if(max > 0){
                    dis = dis>(max+1)/2?dis:(max+1)/2;
                }
                max = 0;
                start = -1;
                end = -1;
            }
        }
        if(end == seats.length-1 && max > 0) {
              return    dis = dis>max?dis:max;
        }
        return dis;
    }
}

運行結果

技術分享圖片

力扣(LeetCode) 849. 到最近的人的最大距離