给你一个数组 seats 表示一排座位,其中 seats[i] = 1 代表有人坐在第 i 个座位上,seats[i] = 0 代表座位 i 上是空的(下标从 0 开始)。
至少有一个空座位,且至少有一人已经坐在座位上。
亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。
返回他到离他最近的人的最大距离。
思路:
- 遍历数组找到所有空座位的索引位置,保存在一个列表中。
- 初始化最大距离为0。
- 遍历空座位的索引列表,计算亚历克斯坐在当前空座位上与离他最近的人的距离。
- 更新最大距离为当前距离与最大距离的较大值。
- 返回最大距离。
代码如下所示:
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)。