給你一個(gè)數(shù)組 seats 表示一排座位,其中 seats[i] = 1 代表有人坐在第 i 個(gè)座位上,s
給你一個(gè)數(shù)組 seats 表示一排座位,其中 seats[i] = 1 代表有人坐在第 i 個(gè)座位上,seats[i] = 0 代表座位 i 上是空的(下標(biāo)從 0 開始)。
至少有一個(gè)空座位,且至少有一人已經(jīng)坐在座位上。
亞歷克斯希望坐在一個(gè)能夠使他與離他最近的人之間的距離達(dá)到最大化的座位上。
返回他到離他最近的人的最大距離。
思路:
1. 遍歷數(shù)組找到所有空座位的索引位置,保存在一個(gè)列表中。
2. 初始化最大距離為0。
3. 遍歷空座位的索引列表,計(jì)算亞歷克斯坐在當(dāng)前空座位上與離他最近的人的距離。
4. 更新最大距離為當(dāng)前距離與最大距離的較大值。
5. 返回最大距離。
代碼如下所示:
```python
def maxDistToClosest(seats):
? ? n = len(seats)
? ? max_distance = 0
? ? empty_seats = []
? ? # 找到所有空座位的索引位置
? ? for i in range(n):
? ? ? ? if seats[i] == 0:
? ? ? ? ? ? empty_seats.append(i)
? ? # 計(jì)算亞歷克斯坐在每個(gè)空座位上與離他最近的人的距離
? ? for seat in empty_seats:
? ? ? ? distance = min(seat - empty_seats[0], empty_seats[-1] - seat)
? ? ? ? max_distance = max(max_distance, distance)
? ? return max_distance
```
復(fù)雜度分析:
- 時(shí)間復(fù)雜度:遍歷數(shù)組需要O(n)的時(shí)間,計(jì)算亞歷克斯與離他最近的人的距離需要O(k)的時(shí)間,其中k為空座位的數(shù)量。因此總時(shí)間復(fù)雜度為O(n+k)。
- 空間復(fù)雜度:除了輸入數(shù)組和一些輔助變量外,需要額外的O(k)的空間來保存空座位的索引。因此總空間復(fù)雜度為O(k)。