给你一个数组 seats 表示一排座位,其中 seats[i] = 1 代表有人坐在第 i 个座位上,seats[i] = 0 代表座位 i 上是空的(下标从 0 开始)。 至少有一个空座位,且至少

给你一个数组 seats 表示一排座位,其中 seats[i] = 1 代表有人坐在第 i 个座位上,seats[i] = 0 代表座位 i 上是空的(下标从 0 开始)。

至少有一个空座位,且至少有一人已经坐在座位上。

亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。

返回他到离他最近的人的最大距离。
思路:

  1. 遍历数组找到所有空座位的索引位置,保存在一个列表中。
  2. 初始化最大距离为0。
  3. 遍历空座位的索引列表,计算亚历克斯坐在当前空座位上与离他最近的人的距离。
  4. 更新最大距离为当前距离与最大距离的较大值。
  5. 返回最大距离。

代码如下所示:

def maxDistToClosest(seats):
    n = len(seats)
    max_distance = 0
    empty_seats = []

    # 找到所有空座位的索引位置
    for i in range(n):
        if seats[i] == 0:
            empty_seats.append(i)

    # 计算亚历克斯坐在每个空座位上与离他最近的人的距离
    for seat in empty_seats:
        distance = min(seat - empty_seats[0], empty_seats[-1] - seat)
        max_distance = max(max_distance, distance)

    return max_distance

复杂度分析:

  • 时间复杂度:遍历数组需要O(n)的时间,计算亚历克斯与离他最近的人的距离需要O(k)的时间,其中k为空座位的数量。因此总时间复杂度为O(n+k)。
  • 空间复杂度:除了输入数组和一些辅助变量外,需要额外的O(k)的空间来保存空座位的索引。因此总空间复杂度为O(k)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值