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).给定一个由正整数组成的非空数组,该数组的度数被定义为任意 ...
随机推荐
- openCV for python的使用
一.openCV简介 OpenCV是一个开源的跨平台计算机视觉库.它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python.Ruby.MATLAB等语言的接口,实现了图像处理和 ...
- 微信小程序中的自定义组件(components)
其实小程序开发很像vue和react的结合,数据绑定和setData 重新渲染页面的数据,最近发现连写组件都是很像,也是醉了,自我认为哈, 因为小程序可以将页面内的功能模块抽象成自定义组件,以便在 ...
- 常用数列总结&性质记录
1.斐波那契数列 P.S.:这里首项下标为 1 递推式:\[F_i=F_{i-1}+F_{i-2},F_1=F_2=1\] 性质: \(1.\sum^{n}_{i=1}F_{i}=F_{n+2}-1\ ...
- 《SaltStack技术入门与实践》—— Peer
Peer 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Peer组件是SaltStack中Minion向Master发布任务的一个组件,使用Peer ...
- Text-CNN 文本分类
1.简介 TextCNN 是利用卷积神经网络对文本进行分类的算法,由 Yoon Kim 在 “Convolutional Neural Networks for Sentence Classifica ...
- [design pattern](3) Dectorator
前言 很久没有写关于设计模式的博客了,实在是没有太多的精力去写.但个人觉得设计模式在我们的日常开发中还是挺重要的,它提高了软件的可维护性.因此还是有必要坚持学习设计模式,写博客主要是为了加深我对设计模 ...
- es之索引的别名操作
1:增加别名 为索引school添加一个别名alias1: 1.1:创建索引 PUT student{ "settings": {"number_of_shards&qu ...
- Mysql中 BLOB字段转String的方法
转:https://www.cnblogs.com/renjie0520/p/5242350.html 1.通过sql直接转换 select CONVERT (*** USING utf8) AS u ...
- onCreateViewHolder方法加载了子项的布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:layout_w ...
- Vue学习(一) :入门案例
1. 开始前的准备 IDE:VSCode(推荐)或者Sublime Text 前导技术:JavaScript中级 2. 官方提供的product例程 product.html页面代码: <div ...