【LeetCode】849. Maximize Distance to Closest Person 解题报告(Python)
作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.cn/
题目地址:https://leetcode.com/problems/maximize-distance-to-closest-person/description/
题目描述
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 <= 20000
- seats contains only 0s or 1s, at least one 0, and at least one 1.
题目大意
给出了一个列表表示一排座位,1代表这个位置有人坐,0代表这个位置没人做。现在需要找一个位置坐,并找出坐在哪个位置时,离旁边人的座位的距离最大,是多少。
解题方法
这道题是不是很眼熟呢?我翻了一下笔记,果然前几天做过啊!现在脑子里还有点印象:需要左右遍历两次。这个题目是【LeetCode】821. Shortest Distance to a Character。当时这个题目的要求是:给定字符串S和属于该字符串的一个字符C,要求出字符串中的每个字符到最近的C的距离。
不要看到一个是求最距离一个是求最远距离就觉得这两个题有不同。其实本题就是求最近距离的最大值!
上面的字符串题是求每个位置到C的最近距离,其实就是这个题的每个位置到1的最近距离。上面的题是要返回一个列表,这个题是要返回列表的最大值。所以就这。
我把字符串的题的解法改一下:
两步走的方案:
第一步,先假设在很远的位置有个座位有人坐,那么从左到右开始遍历,找出每个座位到其最近的左边的有人坐的位置的距离;
第二步,再假设在很远的位置有个座位有人坐,那么从右到左开始遍历,找出每个字符到其最近的右边的有人坐的位置的距离,并和第一步求出的距离进行比较,找出最小值为结果;
最后,找出这个列表的最大值。
两个技巧:
- 设了一个比字符串长度更远的一个字符C,保证后面求最小值更新距离时一定会被更新。
- 无论如何都用到了abs求绝对值,哪怕可能是不需要的,目的是不用费脑子思考谁大谁小了。
代码如下:
class Solution(object):
def maxDistToClosest(self, seats):
"""
:type seats: List[int]
:rtype: int
"""
index = -200000
_len = len(seats)
ans = [0] * _len
for i in range(_len):
if seats[i] == 1:
index = i
else:
ans[i] = abs(i - index)
index = -200000
for i in range(_len - 1, -1, -1):
if seats[i] == 1:
index = i
else:
ans[i] = min(abs(i - index), ans[i])
return max(ans)
日期
2018 年 6 月 10 日 —— 等了两天的腾讯比赛复赛B的数据集,结果人家在复赛刚开始就给了。。
2018 年 11 月 22 日 —— 感恩节快乐~
【LeetCode】849. Maximize Distance to Closest Person 解题报告(Python)的更多相关文章
- [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 ...
- 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 ...
- 849. Maximize Distance to Closest Person
class Solution { public: int maxDistToClosest(vector<int>& seats) { ; ; for(int i:seats) / ...
- 【LeetCode】658. Find K Closest Elements 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/find-k-c ...
- LeetCode 821 Shortest Distance to a Character 解题报告
题目要求 Given a string S and a character C, return an array of integers representing the shortest dista ...
- 【LeetCode】94. Binary Tree Inorder Traversal 解题报告(Python&C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 递归 迭代 日期 题目地址:https://leetcode.c ...
随机推荐
- linux下vi与vim区别以及vim的使用-------vim编辑时脚本高光显示语法
vi与vimvi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对U ...
- 移动测试(web和app)及app测试实战
移动测试androidiosapp上 原生GUI 混合应用H5 web端兼容性浏览器测试需要的内容:safari 浏览器edge浏览器ie11浏览器firefox浏览器chrome浏览器 国内360浏 ...
- WINDOWS中使用svn
官网:https://tortoisesvn.net/index.zh.html (SVN安装包) 然后下载对应的64位安装包(语言包) 安装完后运行 可以存到D盘,新建一个文件夹存放 右键桌面会多 ...
- 分布式事务(4)---最终一致性方案之TCC
分布式事务(1)-理论基础 分布式事务(2)---强一致性分布式事务解决方案 分布式事务(3)---强一致性分布式事务Atomikos实战 强一致性分布式事务解决方案要求参与事务的各个节点的数据时刻保 ...
- 学习java 7.21
学习内容: 模块使用 AWT是窗口框架 它从不同平台的窗口系统中抽取出共同组件,当程序运行时,将这些组件的创建和动作委托给程序所在的运行平台.简而言之,当使用AWT编写图形界面应用时,程序仅指定了界面 ...
- 12. Fedora 中文乱码问题
1. Rhythmbox(音乐播放器乱码) yum install python-mutagen mid3iconv -e GBK *.mp3 2. totem电影播放机播放列表乱码解决1).修改to ...
- 大数据学习----day27----hive02------1. 分桶表以及分桶抽样查询 2. 导出数据 3.Hive数据类型 4 逐行运算查询基本语法(group by用法,原理补充) 5.case when(练习题,多表关联)6 排序
1. 分桶表以及分桶抽样查询 1.1 分桶表 对Hive(Inceptor)表分桶可以将表中记录按分桶键(某个字段对应的的值)的哈希值分散进多个文件中,这些小文件称为桶. 如要按照name属性分为3个 ...
- 案例 stm32的dma传输过程
首先说一下:DMA_GetCurrDataCounter返回值是什么 返回值是dma缓存里还剩余多少空间. 上面本来应该是,发一下,改变一下.但是这里有一行是特殊的. long : 461,*ff l ...
- Linux磁盘分区(三)之查看磁盘分区常用命令
Linux磁盘分区(三)之查看磁盘分区常用命令转自https://blog.csdn.net/x356982611/article/details/77893264 1.df df -T 总的 ...
- mybatis-plus解析
mybatis-plus当用lambda时bean属性不要以is/get/set开头,解析根据字段而不是get/set方法映射