到最近的人的最大距离【LC849】
给你一个数组
seats
表示一排座位,其中seats[i] = 1
代表有人坐在第i
个座位上,seats[i] = 0
代表座位i
上是空的(下标从 0 开始)。至少有一个空座位,且至少有一人已经坐在座位上。
亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。
返回他到离他最近的人的最大距离。
- 思路:贪心+分类讨论
- 如果某个人前面没有其他人,为了使距离最大,应选择坐在位置0
- 如果某个人后面没有其他人,为了使距离最大,应选择坐在位置n-1
- 如果某个位置前后均有人,为了使距离最大,应坐在这两个人中间
- 取最大值返回
- 实现
class Solution { public int maxDistToClosest(int[] seats) { int n = seats.length; int res = 0, pre = -1; for (int i = 0; i < n; i++){ if (seats[i] == 1){ if (pre == -1){// 前面没有人坐 坐在0 res = Math.max(res, i); }else{// 坐在pre和i的中间位置 res = Math.max(res, (i - pre) / 2); } pre = i; } } res = Math.max(res, n - 1 - pre);// 坐在n-1 return res; } }