[LeetCode] 849. Maximize Distance to Closest Person 最大化最近人的距离
In a row of seats, 1 represents a person sitting in that seat, and 0 represents that the seat is empty.
There is at least one empty seat, and at least one person sitting.
Alex wants to sit in the seat such that the distance between him and the closest person to him is maximized.
Return that maximum distance to closest person.
Example 1:
Input: [1,0,0,0,1,0,1]
Output: 2
Explanation:
If Alex sits in the second open seat (seats[2]), then the closest person has distance 2.
If Alex sits in any other open seat, the closest person has distance 1.
Thus, the maximum distance to the closest person is 2.
Example 2:
Input: [1,0,0,0]
Output: 3
Explanation:
If Alex sits in the last seat, the closest person is 3 seats away.
This is the maximum distance possible, so the answer is 3.
Note:
1 <= seats.length <= 20000seatscontains only 0s or 1s, at least one0, and at least one1.
有一排座位,1代表座位有人,0代表座位空着。最少有1个人和1个空座位。Alex 想坐到一个座位上,使得离他最近的人的距离最大化,返回这个最大距离。
解法:双指针,左指针开始是0, 右指针是循环的index,右指针遇到1就计算与左指针的距离,计算完以后左指针变成现在的index。如果alex坐到两个1中间,则离他最近的人的距离是那两个人的index差除以2。如果第一个和最后一个座位是空位0,则alex可以坐到这个空位上,使得此时的距离最大。然后对所有的距离取最大的返回。
Java:
public int maxDistToClosest(int[] seats) {
int i, j, res = 0, n = seats.length;
for (i = j = 0; j < n; ++j)
if (seats[j] == 1) {
if (i == 0) res = Math.max(res, j - i);
else res = Math.max(res, (j - i + 1) / 2);
i = j + 1;
}
res = Math.max(res, n - i);
return res;
}
Java:
class Solution {
public int maxDistToClosest(int[] seats) {
int left = -1, maxDis = 0;
int len = seats.length;
for (int i = 0; i < len; i++) {
if (seats[i] == 0) continue;
if (left == -1) {
maxDis = Math.max(maxDis, i);
} else {
maxDis = Math.max(maxDis, (i - left) / 2);
}
left = i;
}
if (seats[len - 1] == 0) {
maxDis = Math.max(maxDis, len - 1 - left);
}
return maxDis;
}
}
Python:
# Time: O(n)
# Space: O(1)
class Solution(object):
def maxDistToClosest(self, seats):
"""
:type seats: List[int]
:rtype: int
"""
prev, result = -1, 1
for i in xrange(len(seats)):
if seats[i]:
if prev < 0:
result = i
else:
result = max(result, (i-prev)//2)
prev = i
return max(result, len(seats)-1-prev)
Python: wo
class Solution(object):
def maxDistToClosest(self, seats):
"""
:type seats: List[int]
:rtype: int
"""
left = 0
max_d = 0
for i in range(len(seats)):
if seats[i] == 1:
if seats[0] == 0 and left == 0:
max_d = max(max_d, i - left)
else:
max_d = max(max_d, (i - left) / 2)
left = i if seats[-1] == 0:
max_d = max(max_d, len(seats) - 1 - left) return max_d
C++:
int maxDistToClosest(vector<int> seats) {
int i, j, res = 0, n = seats.size();
for (i = j = 0; j < n; ++j)
if (seats[j] == 1) {
if (i == 0) res = max(res, j - i);
else res = max(res, (j - i + 1) / 2);
i = j + 1;
}
res = max(res, n - i);
return res;
}
All LeetCode Questions List 题目汇总
[LeetCode] 849. Maximize Distance to Closest Person 最大化最近人的距离的更多相关文章
- [LeetCode] 849. Maximize Distance to Closest Person_Easy tag: BFS
In a row of seats, 1 represents a person sitting in that seat, and 0 represents that the seat is emp ...
- leetcode 849. Maximize Distance to Closest Person
In a row of seats, 1 represents a person sitting in that seat, and 0 represents that the seat is emp ...
- 849. Maximize Distance to Closest Person ——weekly contest 87
849. Maximize Distance to Closest Person 题目链接:https://leetcode.com/problems/maximize-distance-to-clo ...
- 【Leetcode_easy】849. Maximize Distance to Closest Person
problem 849. Maximize Distance to Closest Person solution1: class Solution { public: int maxDistToCl ...
- 【LeetCode】849. Maximize Distance to Closest Person 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 849. Maximize Distance to Closest Person
class Solution { public: int maxDistToClosest(vector<int>& seats) { ; ; for(int i:seats) / ...
- [LeetCode] Maximize Distance to Closest Person 离最近的人的最大距离
In a row of seats, 1 represents a person sitting in that seat, and 0 represents that the seat is emp ...
- C#LeetCode刷题之#849-到最近的人的最大距离(Maximize Distance to Closest Person)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3754 访问. 在一排座位( seats)中,1 代表有人坐在座位 ...
- LeetCode算法题-Maximize Distance to Closest Person(Java实现)
这是悦乐书的第328次更新,第351篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第198题(顺位题号是849).在一排座位中,1表示一个人坐在该座位上,0表示座位是空的 ...
随机推荐
- QtWebEngineWidgets
我用的qt5.10+VS2017,2013应该一样项目属性里手动添加包含目录:(QTDIR)\include\QtWebEngineWidgets,(QTDIR)\include\QtWebChann ...
- 复旦高等代数 I(15级)每周一题
[问题2015A01] 证明: 第三类分块初等变换是若干个第三类初等变换的复合. 特别地, 第三类分块初等变换不改变行列式的值. [问题2015A02] 设 $n\,(n\geq 2)$ 阶方阵 ...
- npm start的时候改变端口及组合脚本
windows npm修改端口启动 set PORT=3000&&roadhog server npm start Linux npm 修改端口启动 set PORT=3000 roa ...
- YouTube排名第一的励志英文演讲《Dream(梦想)》
I don’t know what that dream is that you have, I don't care how disappointing it might have been as ...
- 2018-2019-2 网络对抗技术 20165322 Exp8 Web基础
2018-2019-2 网络对抗技术 20165322 Exp8 Web基础 目录 实验原理 实验内容与步骤 Web前端HTML Web前端javascipt Web后端:MySQL基础:正常安装.启 ...
- .net Core 中DateTime在Linux Docker中与Windows时间不一致
最近写了一个.net core项目,部署到CentOS并在docker上运行的时候,发现DateTime.Now获取的时间与Windows不一致(定时执行的任务,晚了8个小时),在Windows中可以 ...
- Java字节码增强探秘
Java字节码增强探秘 https://mp.weixin.qq.com/s/CH9D-E7fxuu462Q2S3t0AA
- button按钮的状态为disabled禁用状态,click事件无法触发,但是为什么touchstart下却依然可以触发
切换到移动模拟模式,并点击按钮,查看控制台. 发现click没有事件没有触发,而touch事件依然触发. 解决办法: 对于移动端我们使用css来禁止按钮,达到disable的效果: 对,就是这个神奇的 ...
- Remix 搭建与简单使用,并支持外部访问
Remix 搭建与简单使用,并支持外部访问 转 https://blog.csdn.net/linshenyuan1213/article/details/83444911 remix是基于浏览器的在 ...
- vue的vuex在使用...mapState 和...mapGetter报错的解决方案
from:https://blog.csdn.net/ysterling/article/details/88145765 采用mapState 和mapGetter,在页面使用时报错,这是因为bab ...