# print ("math.ceil(math.pi) : ", math.ceil(math.pi)) # output:4
# 返回一个大于等于的值
思路:
1. 如果首and尾是1的情况,那么只能坐在两个1之间;
2. 如果首or尾是0的情况,那么可以坐在0之前或者0之后。
class Solution(object):
def maxDistToClosest(self, seats):
"""
:type seats: List[int]
:rtype: int
"""
# input: seats = [1,1,0,0,0]
ans1,ans2,ans3 = 0,0,0
# seats_str = ''.join([str(i) for i in seats]).split('1') # ['', '000']
# print(seats_str)
# seats_str.remove('') # ['000']
seats_str = ''.join(map(str, seats)).split('1')
# 这种没有空格 # seats = ''.join(map(str, seats)).split('1') # ['000']
# 1---在中间
seats_str = list(map(len, seats_str))
ans3 = (max(seats_str) + 1) // 2
# print("ans3",ans3)
# print(seats_str) # [0, 3]
# # 2---在首尾
# print(seats) # [1, 1, 0, 0, 0]
# print(seats[:-1]) # [1, 1, 0, 0]
# print(seats[::-1]) # [0, 0, 0, 1, 1]
if seats[0] == 0:
ans1 = seats.index(1) # 数字1的下标是多少
# print("ans1",ans1)
if seats[len(seats)-1] == 0:
ans2 = seats[::-1].index(1)
# print("ans2",ans2)
return max(ans1,ans2,ans3)
去掉注释:
def maxDistToClosest(self, seats):
ans1,ans2,ans3 = 0,0,0
seats_str = ''.join(map(str, seats)).split('1')
seats_str = list(map(len, seats_str))
ans3 = (max(seats_str) + 1) // 2
if seats[0] == 0:
ans1 = seats.index(1)
if seats[len(seats)-1] == 0:
ans2 = seats[::-1].index(1)
return max(ans1,ans2,ans3)
方法二:
class Solution:
def maxDistToClosest(self, seats):
"""
:type seats: List[int]
:rtype: int
"""
max_cnt = cnt = 0
for i, seat in enumerate(seats):
if seat:
if i - cnt != 0 : cnt = (cnt >> 1) + cnt % 2
if cnt > max_cnt: max_cnt = cnt
cnt = 0
else: cnt += 1
if cnt > max_cnt: max_cnt = cnt
return max_cnt