leetcode849. 到最近的人的最大距离

链接:https://leetcode.cn/problems/maximize-distance-to-closest-person/


题目
给你一个数组 seats 表示一排座位,其中 seats[i] = 1 代表有人坐在第 i 个座位上,seats[i] = 0 代表座位 i 上是空的(下标从 0 开始)。
至少有一个空座位,且至少有一人已经坐在座位上。
亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。
返回他到离他最近的人的最大距离。
image
image

思路
双指针。
最大距离就是d//2 → 要知道d。初始化d = 0。
遍历数组 seats,用 first 和 last 记录第一个有人的位置。继续遍历,遇到下一个有人的位置 i 时,更新 d 为 max(d, i - last),并更新 last = i。
考虑到只有一个位置有人坐(这里又分两种,Alex坐最左与坐最右)的情况(此时d==0),返回 max(first, len(seats) - last - 1, d // 2)。

题解
1,我的题解

class Solution:
    def maxDistToClosest(self, seats: List[int]) -> int:
        first = last = None
        d = 0
        for i, c in enumerate(seats):
            if c:
                if first == None:
                    first = i
                    last = i
                d = max(d, i - last)
                last = i
        return max(first, len(seats) - last - 1, d // 2)

2,更优题解(来自乐扣用户:ylb)

class Solution:
    def maxDistToClosest(self, seats: List[int]) -> int:
        first = last = None
        d = 0
        for i, c in enumerate(seats):
            if c:
                if last is not None:
                    d = max(d, i - last)
                if first is None:
                    first = i
                last = i
        return max(first, len(seats) - last - 1, d // 2)

发表评论