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

Posted mikemeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了849. 到最近的人的最大距离相关的知识,希望对你有一定的参考价值。

题目:

在一排座位( 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 中只含有 01,至少有一个 0,且至少有一个 1

 

class Solution {
public:
    int maxDistToClosest(vector<int>& seats) {
        int n = seats.size();
        int res = 0;
        int sit = 0;
        
        vector<int> left(n,0);
        vector<int> right(n,0);
        
        /*left*/
        int flag = -1;
        left[0] = -1;
        for(int i = 1;i < n;++i){
            if(seats[i-1]){
                flag = i-1;
            }
            if(flag >= 0){
                left[i] = i - flag;
            }else{
                left[i] = -1;
            }
            //cout<<left[i]<<",";
        }
        //cout<<endl;
        
        /*right*/
        flag = -1;
        right[n-1] = -1;
        for(int i = n-2 ;i >= 0; --i){
            if(seats[i+1]){
                flag = i+1;
            }
            
            if(flag >= 0){
                right[i] = flag - i;
            }else{
                right[i] = -1;
            }
            //cout<<right[i]<<",";
        }
        //cout<<endl;
        
        for(int i = 0;i < n; ++i){
            if(seats[i] == 0){
                int distance = 20001;
                if(left[i] > 0){
                    distance = min(left[i],distance);
                }
                if(right[i] > 0){
                    distance = min(right[i],distance);
                }
                if(distance < 20001){
                    res = max(res,distance);
                }
            }
        }
        
        return res;
    }
};

 

以上是关于849. 到最近的人的最大距离的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode算法题-Maximize Distance to Closest Person(Java实现)

计算检测到的人的距离

849. Maximize Distance to Closest Person ——weekly contest 87

新解法华为OD机试 - 停车场最大距离 | 备考思路,刷题要点,答疑,od Base 提供

849. Dijkstra求最短路 I

在给定坐标和最大距离的情况下查找到某个点的最近点 - 使用 Mongoose 和 MEAN 堆栈查询结果未定义