1. 程式人生 > >849. 到最近的人的最大距離——list.index('值')

849. 到最近的人的最大距離——list.index('值')

# 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