【leetcode】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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值