Java实现选最远距离的座位_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
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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
Java实现选最远距离的座位_LeetCode算法题-Maximize Distance to Closest Person(Java实现)...相关推荐
- java实现对英文字母去重_LeetCode算法题-Unique Morse Code Words(Java实现)
这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...
- java关于hashmap编程题_LeetCode算法题-Design HashMap(Java实现)
这是悦乐书的第299次更新,第318篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第167题(顺位题号是706).在不使用任何内置哈希表库的情况下设计HashMap.具体 ...
- 算法题库 java实现_LeetCode算法题-Most Common Word(Java实现)
这是悦乐书的第321次更新,第342篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第190题(顺位题号是819).给定一个段落和一组禁止词,返回不在禁止词列表中的最常用词 ...
- Java构造字符串算法题_LeetCode算法题-Repeated Substring Pattern(Java实现)
这是悦乐书的第236次更新,第249篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第103题(顺位题号是459).给定非空字符串检查是否可以通过获取它的子字符串并将子字符 ...
- java无序数组找最长连续子串,算法题整理
链表: 一个单链表,奇数位升序,偶数位降序,输出排序后的单链表.(写了个归并,拆成两个单链表并且把偶数位做头插翻转过来,再归并到一起.) 链表节点两两反转 奇偶链表 单向链表,头尾奇偶交替输出(中等) ...
- magic square java_LeetCode算法题-Magic Squares In Grid(Java实现)
这是悦乐书的第326次更新,第349篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第196题(顺位题号是840).3 x 3魔方是一个3 x 3网格,填充了从1到9的不同 ...
- 用Java刷算法题的常用数据结构(C++转Java)
文章目录 一:前言 1:为何刷题从C++转java 2:如何上手呢? 二:输入 1:常规的输入 2:关于其他输入符在nextLine()之前用吃掉回车符的问题解决 3:常见输入之我们输入一串数到容器中 ...
- java二叉树 最大值_leetcode刷题笔记-654. 最大二叉树(java实现)
题目描述 给定一个不含重复元素的整数数组 nums .一个以此数组直接递归构建的 最大二叉树 定义如下: 二叉树的根是数组 nums 中的最大元素. 左子树是通过数组中 最大值左边部分 递归构造出的最 ...
- LeetCode算法题17:电话号码的字母组合(Java版)
LeetCode传送门:电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: ...
最新文章
- 博士买房后发现被坑,于是写万字论文维权,网友:维权界的天花板...
- 误差、方差、偏差、噪声、训练误差+验证误差、偏差方差窘境、错误率和误差、过拟合与欠拟合
- python科学计算基础教程pdf下载-python科学计算 第二版 PDF 下载
- Java后台返回和处理JSon数据的方法
- gsoap(C/C++调用webservice)
- 2021 第三封拒信 来自牛津大学自主智能机器和系统 Autonomous Intelligent Machines and Systems
- spring batch
- Struts文件上传与下载详解_文件的下载
- druid 非对称加密_springboot配置文件中mysql的密码进行加密
- matlab修改图片位深度_如何利用matlab统一处理照片亮度对比度
- 1203.2——条件语句 之 switch语句
- 3dsMax学习笔记06_用VRayMtl材质制作室外雕塑
- ZDNET的一个技术博客评选结果
- 人机协作机器人发展趋势_人机协作引领机器人产业新趋势
- 手机号和座机号正则表达式
- Harmonious
- 浅谈MySQL查询优化
- 电子商务垂直化与纵深化发展的创新之路
- 文字图片转换成html,将图片转换成HTML格式的文字图程序源代码
- java:P1157 组合的输出
热门文章
- R语言glmnet包拟合广义线性模型
- 3.5.1 插入 3.5.2 修改
- 乾坤符和鸿蒙符,少年三国志四种暗金兵符技能怎么样 四种暗金兵符技能分析...
- 个人计算机中的cache,cache在计算机中的作用是什么?
- jsp java 登陆_jsp+java servlet实现简单用户登录
- oracle11g资源过低,Sun Cluster3.3+Oracle11g配置数据库资源问题
- java悲观者不加事务_在spring中,使用事务和不用事务的区别
- 目标检测中的尺度--An Analysis of Scale Invariance in Object Detection – SNIP
- add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX
- mysql8.0.28忘记密码