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 中只含有 0 和 1,至少有一个 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