[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表示座位是空的 ...
随机推荐
- RMQ--树状数组,ST表,线段树
RMQ Range Minimum/Maximum Query 区间最值问题 树状数组 https://www.cnblogs.com/xenny/p/9739600.html lowbit(x) x ...
- linux学习3 Linux云计算系列课程体系全面介绍
一.课程体系 二.IT领域职位介绍
- PHP安装之configure的配置参数
1.生成环境安装配置如下 要求安装如下库: imagickgdmysqlmysqlimysqlndphalconPharsoapsocketsxwebxsvczipzlib 具体查看 vim php- ...
- 2017.10.4 国庆清北 D4T1 财富
(其实这题是luogu P1901 发射站 原题,而且数据范围还比luogu小) 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以身高为美的环境,因此在 ...
- UOJ188. 【UR #13】Sanrd [min_25筛]
传送门 思路 也可以算是一个板题了吧qwq 考虑min_25筛最后递归(也就是DP)的过程,要枚举当前最小的质因子是多少. 那么可以分类讨论,考虑现在这个质因子是否就是次大质因子. 如果不是,那么就是 ...
- 发布自己的类库包到Nuget
今天来记录下发布自己的类库到Nuget. 一.准备工作 注册www.nuget.org,获取APIKey 后面发布要使用到. 二.创建项目 新建类库项目 新建测试demo类 public class ...
- [luogu 3773][CTSC 2017]吉夫特
传送门 Solution 输入一个长度为n的数列,求有多少个长度大等于2的不上升子序列满足: \[\prod_{i=2}^{k} C(a_{b_{i-1}},a_{b_i}) mod\ 2 > ...
- Spring的xml中引入其他文件
引入db.properties <!--加载db.properties文件--> <context:property-placeholder location="class ...
- gitconfig别名配置
vim ~/.gitconfig 进行配置 [user] name = Your Name email = you@yourdomain.example.com [core] editor = vim ...
- Node.js之文件下载
Node.js之文件下载,主要最近解决我的一个需求. 需求描述:如何将腾讯云上传的文件存储到本地某个目录下,如果用js来实现,纯JavaScript没有这样的功能(也许有),正好我这个项目用node. ...