LeetCode算法题-Maximize Distance to Closest Person(Java实现)
这是悦乐书的第328次更新,第351篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第198题(顺位题号是849)。在一排座位中,1表示一个人坐在该座位上,0表示座位是空的。在这些座位中,至少有一个空座位,至少有一个人坐着。Alex想坐在座位上,以便他和离他最近的人之间的距离最远。返回距离最近的人的最大距离。例如:
输入:[1,0,0,0,1,0,1]
输出:2
说明:如果Alex坐在第二个空座位(seats[2]),那么离最近的人距离为2。如果Alex坐在任何其他空座位上,则离最近的人的距离为1。因此,到最近的人的最大距离是2。
输入:[1,0,0,0]
输出:3
说明:如果Alex坐在最后一个座位上,那么离他最近的人距离为3。这是可能的最大距离,所以答案是3。
注意:
1 <= seats.length <= 20000
所有座位中仅包含0或1,至少一个0,至少一个1。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 解题
在解题前,先来看看题目的意思。Alex想要在一排座位中,找到一个离人最近但是距离最远的座位,题目通过一个数组来表示一排座位,元素值为0表示当前这个座位是空的,Alex可以坐,为1时表示当前这个座位有人坐了,Alex不能坐,也就是说,在为0的座位中,要找一个离最近的人距离越远越好的座位。我们可以分三种情况来选座位:
(1)左边是墙时,即数组中第一个元素是0,或者数组前部分是连续的0,如果往右,至少会遇到一个座位上有人,此时Alex离这个人是最近的,距离也是最远的。比如数组{0,0,0,1},Alex坐在第一个座位上,离他最近的人的最远距离是3。
(2)左右两边都有人时,即此时数组中出现了一段连续的0,也就是有连续好几个连着的空座位可以选,此时Alex坐在这些连续空座位的中间是最好的,离左右两边的人最近,距离也是相等的。比如数组{1,0,0,0,1},Alex坐在第三个座位上,即坐在seats[2]上,距离两边的人都是最近的,且距离最大,都为2。
(3)右边是墙时,即数组中最后一个元素是0,或者后部分是连续的0,如果往左,至少会遇到一个座位上有人,此时Alex离这个人是最近的,距离也是最远的。比如数组{1,0,0,0},Alex坐在第四个座位上,离他最近的人的最远距离是3。
通过上面的分析,我们可以使用一个变量记录前一个座位已经被坐的索引,再根据当前座位来判断,看属于上面三种情况中的哪一种,计算距离,比较最大值,通过双指针来实现。
注意,计算距离是计算索引之差。
public int maxDistToClosest(int[] seats) {
int left = -1, n = seats.length;
int maxDistance = 0;
for (int i=0; i<n; i++) {
if (seats[i] == 0) {
continue;
}
if (left == -1) {
// 左边第一位是1或者连续的0,有可能左边靠墙
maxDistance = Math.max(maxDistance, i);
} else {
// 中间部分连续的0,即中间
maxDistance = Math.max(maxDistance, (i-left)/2);
}
left = i;
}
// 结束部分为连续的0,即右边靠墙
if (seats[n-1] == 0) {
maxDistance = Math.max(maxDistance, n-1-left);
}
return maxDistance;
}
03 小结
算法专题目前已日更超过五个月,算法题文章198+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Maximize Distance to Closest Person(Java实现)的更多相关文章
- LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)
这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...
- LeetCode算法题-Hamming Distance(Java实现)
这是悦乐书的第237次更新,第250篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第104题(顺位题号是461).两个整数之间的汉明距离是相应位不同的位置数.给定两个整数 ...
- LeetCode算法题-Shortest Distance to a Character(Java实现)
这是悦乐书的第321次更新,第343篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第191题(顺位题号是821).给定字符串S和字符C,返回一个整数数组,表示字符串中所有 ...
- LeetCode算法题-Unique Morse Code Words(Java实现)
这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...
- LeetCode算法题-Robot Return to Origin(Java实现)
这是悦乐书的第281次更新,第298篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第149题(顺位题号是657).在2D平面上有一个从位置(0,0)开始的机器人.给定其移 ...
- LeetCode算法题-Min Cost Climbing Stairs(Java实现)
这是悦乐书的第307次更新,第327篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第176题(顺位题号是746).在楼梯上,第i步有一些非负成本成本[i]分配(0索引). ...
- LeetCode算法题-Longest Word in Dictionary(Java实现)
这是悦乐书的第303次更新,第322篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第171题(顺位题号是720).给出表示英语词典的字符串单词数组,找到单词中长度最长的单 ...
- LeetCode算法题-1-bit and 2-bit Characters(Java实现)
这是悦乐书的第302次更新,第321篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第170题(顺位题号是717).有两个特殊字符,第一个字符可以用一个比特0表示,第二个字 ...
- LeetCode算法题-Degree of an Array(Java实现)
这是悦乐书的第294次更新,第312篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第162题(顺位题号是697).给定一个由正整数组成的非空数组,该数组的度数被定义为任意 ...
随机推荐
- 为什么 Android 开发者都应该尝试一下 Anko?
简评: 这里介绍的仅仅是 Anko 中很小的一部分,Kotlin + Anko 真的让 Android 开发简化了不少,用了 Anko 基本就可以告别那些什么 Android 不得不知的代码收集贴了. ...
- element 表单校验失败自动聚焦到失败的input框
1.在对应的input框上添加ref属性,直接根据ref就可精确地获取到元素 <el-form-item label="课程名称" :label-width="fo ...
- Python之网络编程之concurrent.futures模块
需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...
- 一个IP,一个linux服务器,两个项目,两个域名;如何将两个域名配置到同一个IP的两个项目中。
一.现有资源: 1.阿里云centOS6.5服务器: 2.安装tomcat8.0+JDK: 3.两个不同maven项目的war包,项目名分别为cloud.am: 4.两个域名http://www.lu ...
- 【SaltStack官方版】—— STORING JOB RESULTS IN AN EXTERNAL SYSTEM
STORING JOB RESULTS IN AN EXTERNAL SYSTEM After a job executes, job results are returned to the Salt ...
- Hadoop2.7.4 yarn(HA)集群搭建步骤(CentOS7)
群节点分配: Park01:Zookeeper.NameNode(active).ResourceManager(active) Park02:Zookeeper.NameNode(standby) ...
- Redis :Linux和Window查看版本号
一.Linux版本:查看服务端版本 **二者都可以** redis-server -v redis-server --version 查看客户端版本 **二者都可以** redis-cli -v re ...
- ansible-乱
工作机制:ssh 无客户端 工作方式: 1,CMDB 2,公有云私有云API 3,使用ad-hoc 4,ansible-playbook ansible 执行命令,底层调用传输连接模块,将命令或文件传 ...
- win7如何设置以管理员身份运行
一.对所有程序以管理员身份运行 1.右键单击桌面“计算机”,选择“管理” 2.在页面左侧,依此打开“计算机管理(本地)→ 系统工具→本地用户和组→用户”,在右侧找到“Administrator”,双击 ...
- T3
T3构造图