这是悦乐书的第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实现)...相关推荐

  1. java实现对英文字母去重_LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  2. java关于hashmap编程题_LeetCode算法题-Design HashMap(Java实现)

    这是悦乐书的第299次更新,第318篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第167题(顺位题号是706).在不使用任何内置哈希表库的情况下设计HashMap.具体 ...

  3. 算法题库 java实现_LeetCode算法题-Most Common Word(Java实现)

    这是悦乐书的第321次更新,第342篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第190题(顺位题号是819).给定一个段落和一组禁止词,返回不在禁止词列表中的最常用词 ...

  4. Java构造字符串算法题_LeetCode算法题-Repeated Substring Pattern(Java实现)

    这是悦乐书的第236次更新,第249篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第103题(顺位题号是459).给定非空字符串检查是否可以通过获取它的子字符串并将子字符 ...

  5. java无序数组找最长连续子串,算法题整理

    链表: 一个单链表,奇数位升序,偶数位降序,输出排序后的单链表.(写了个归并,拆成两个单链表并且把偶数位做头插翻转过来,再归并到一起.) 链表节点两两反转 奇偶链表 单向链表,头尾奇偶交替输出(中等) ...

  6. magic square java_LeetCode算法题-Magic Squares In Grid(Java实现)

    这是悦乐书的第326次更新,第349篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第196题(顺位题号是840).3 x 3魔方是一个3 x 3网格,填充了从1到9的不同 ...

  7. 用Java刷算法题的常用数据结构(C++转Java)

    文章目录 一:前言 1:为何刷题从C++转java 2:如何上手呢? 二:输入 1:常规的输入 2:关于其他输入符在nextLine()之前用吃掉回车符的问题解决 3:常见输入之我们输入一串数到容器中 ...

  8. java二叉树 最大值_leetcode刷题笔记-654. 最大二叉树(java实现)

    题目描述 给定一个不含重复元素的整数数组 nums .一个以此数组直接递归构建的 最大二叉树 定义如下: 二叉树的根是数组 nums 中的最大元素. 左子树是通过数组中 最大值左边部分 递归构造出的最 ...

  9. LeetCode算法题17:电话号码的字母组合(Java版)

    LeetCode传送门:电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: ...

最新文章

  1. 博士买房后发现被坑,于是写万字论文维权,网友:维权界的天花板...
  2. 误差、方差、偏差、噪声、训练误差+验证误差、偏差方差窘境、错误率和误差、过拟合与欠拟合
  3. python科学计算基础教程pdf下载-python科学计算 第二版 PDF 下载
  4. Java后台返回和处理JSon数据的方法
  5. gsoap(C/C++调用webservice)
  6. 2021 第三封拒信 来自牛津大学自主智能机器和系统 Autonomous Intelligent Machines and Systems
  7. spring batch
  8. Struts文件上传与下载详解_文件的下载
  9. druid 非对称加密_springboot配置文件中mysql的密码进行加密
  10. matlab修改图片位深度_如何利用matlab统一处理照片亮度对比度
  11. 1203.2——条件语句 之 switch语句
  12. 3dsMax学习笔记06_用VRayMtl材质制作室外雕塑
  13. ZDNET的一个技术博客评选结果
  14. 人机协作机器人发展趋势_人机协作引领机器人产业新趋势
  15. 手机号和座机号正则表达式
  16. Harmonious
  17. 浅谈MySQL查询优化
  18. 电子商务垂直化与纵深化发展的创新之路
  19. 文字图片转换成html,将图片转换成HTML格式的文字图程序源代码
  20. java:P1157 组合的输出

热门文章

  1. R语言glmnet包拟合广义线性模型
  2. 3.5.1 插入 3.5.2 修改
  3. 乾坤符和鸿蒙符,少年三国志四种暗金兵符技能怎么样 四种暗金兵符技能分析...
  4. 个人计算机中的cache,cache在计算机中的作用是什么?
  5. jsp java 登陆_jsp+java servlet实现简单用户登录
  6. oracle11g资源过低,Sun Cluster3.3+Oracle11g配置数据库资源问题
  7. java悲观者不加事务_在spring中,使用事务和不用事务的区别
  8. 目标检测中的尺度--An Analysis of Scale Invariance in Object Detection – SNIP
  9. add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX
  10. mysql8.0.28忘记密码