In a row of seats1 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. 1 <= seats.length <= 20000
  2. seats contains only 0s or 1s, at least one 0, and at least one 1.

有一排座位,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 最大化最近人的距离的更多相关文章

  1. [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 ...

  2. 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 ...

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

    849. Maximize Distance to Closest Person 题目链接:https://leetcode.com/problems/maximize-distance-to-clo ...

  4. 【Leetcode_easy】849. Maximize Distance to Closest Person

    problem 849. Maximize Distance to Closest Person solution1: class Solution { public: int maxDistToCl ...

  5. 【LeetCode】849. Maximize Distance to Closest Person 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  6. 849. Maximize Distance to Closest Person

    class Solution { public: int maxDistToClosest(vector<int>& seats) { ; ; for(int i:seats) / ...

  7. [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 ...

  8. C#LeetCode刷题之#849-到最近的人的最大距离(Maximize Distance to Closest Person)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3754 访问. 在一排座位( seats)中,1 代表有人坐在座位 ...

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

    这是悦乐书的第328次更新,第351篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第198题(顺位题号是849).在一排座位中,1表示一个人坐在该座位上,0表示座位是空的 ...

随机推荐

  1. 2019-2020-1 20199302《Linux内核原理与分析》第五周作业

    一.用户态.内核态和中断 1.一般现代cpu都有几种不用的指令执行级别 2.在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态. 3.在相应的低级别执行状态下, ...

  2. Mac zsh 所有命令失效

    正在配置一些东西,然后zsh的所有命令不能用了. 我艹...... 然后一顿猛查,发现有个命令好使,记录一下 在命令行只想输入下面命令 PATH=/bin:/usr/bin:/usr/local/bi ...

  3. 第12组 Alpha冲刺(2/6)

    Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...

  4. 判断qq浏览器和uc浏览器?

    判断在iphone手机上打开的是uc浏览器还是qq浏览器 <html lang="en"> <head> <meta charset="ut ...

  5. zabbix与agent端通信加密

    Zabbix版本从3.0之后,开始支持Zabbix server, Zabbix proxy, Zabbix agent, zabbix_sender and zabbix_get之间的通信加密,加密 ...

  6. fluent meshing导入二维网格

    meshing导入二维网格"> fluent meshing只能在Dimension为3D时才能使用 meshing导入二维网格"> 其实也可以导入二维网格,具体操作见 ...

  7. 关于hexo与github使用过程中的问题与笔记

    快速阅读 如何用github 和hexo 创建一个blog 1.github中要新建一个与用户名同一样的仓库, 如:homehe.github.io - 必须是io后缀.一个帐户 只能建立一个 2. ...

  8. CORS & CSP笔记

    1.CORS & CSP 浏览器跨域相关的安全策略主要存在于两个方面: 浏览器是否发送ajax 浏览器是否加载返回数据 假设从a.com 向b.com发送ajax请求.此时浏览器当前页面为a. ...

  9. 【转】JVM类装载机制的解析,热更新的探讨(二)

    同样,一个Class对象必须知道自己的超类.超级接口.因此,Class对象会引用自己的超类和超级接口的Class对象.这种引用一定是实例引用.(实际上,超类.超级接口的引用也存储在常量池中,但为了区分 ...

  10. android x86 安装

    1.下载页面 http://www.android-x86.org 下载了: android-x86-8.1-r2.iso 用Win32DiskImager制作usb启动盘. 参考: https:// ...