849. 到最近的人的最大距離——list.index('值')
阿新 • • 發佈:2018-12-31
# 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