首页 > 其他 > 详细

每日一题:21.3.12——LeetCode 849题

时间:2021-03-13 00:16:46      阅读:43      评论:0      收藏:0      [点我收藏+]

力扣 849题 .到最近的人的最大距离

题目描述:

给出一个数组 seats 表示一排座位,其中 seats[i] = 1 代表有人坐在第 i 个座位上,seats[i] = 0 代表座位 i 上是空的(下标从 0 开始)。

至少有一个空座位,且至少有一人已经坐在座位上。

亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。

返回他到离他最近的人的最大距离。

涉及内容:数组

示例:
技术分享图片

技术分享图片

思路:从问题描述可以知道,这个问题的本质就是求给定有值点之间距离最大值(的一半)。

不过对于端点值来说,需要特殊考虑,因为它们只涉及单方向的情况。

具体来说,可以遍历一次数组,然后用两个标签来保存最大值和当前值为1的数值的下标

此外这里调用enumerate( )函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

使用方法

arr=[1,2,‘one‘,‘two‘,5]
for i,element in enumerate():
    print i,element
输出结果:
0 1
1 2
2 one
3 two
4 5

提交结果:

技术分享图片

完整代码:

arr=[0,1,0,1,0]
one_index=-1 #值为1的点的下标
max_dis=0    #最大距离值
temp_dis=0   #此段距离值
for index,i in enumerate(arr):
    if i==1:
        if one_index==-1:  #如果发现第一个1之前都为0 那么此时最大距离就为此时点的下标
            temp_dis=index #也就是意思开始端点值为0
        else:
            temp_dis=(index-one_index)//2 #计算两个端点之间的最大值/2
        if temp_dis>max_dis:
            max_dis=temp_dis
        one_index=index  #更新当前值为1的点的下标
if arr[-1]==0:  #如果最后一个端点值为0
    temp_dis=len(arr)-1-one_index #则此段距离就是末尾端点到上一个值为1的点之间的距离值
    if temp_dis>max_dis:
        max_dis=temp_dis

print(max_dis)

技术分享图片

思路2:

求出所有1的索引,求出索引之间的平均距离即为最大距离,此外注意边界问题(索引为0和n-1时)

arr=[0,1,0,1,0]
index_1 = [0]
for i in range(len(arr)):
    if arr[i] == 1:
        index_1.append(i)
        index_1.append(len(arr)-1)
result = [index_1[1]-index_1[0], index_1[-1]-index_1[-2]]
for j in range(1, len(index_1)-1):
    result.append((index_1[j+1]-index_1[j])//2)
print(max(arr))

每日一题:21.3.12——LeetCode 849题

原文:https://www.cnblogs.com/leohbz/p/14526439.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!