找座位 python版

一、题目描述

疫情期间课堂的座位进行了特殊的调整,不能出现两个同学紧挨着,必须隔至少一个空位。

给你一个整数数组 desk 表示当前座位的占座情况,由若干 0 和 1 组成,其中 0 表示没有占位,1 表示占位。在不改变原有座位秩序情况下,还能安排坐几个人?

输入描述

第一行是个子数组表示作为占座情况,由若干 0 和 1 组成,其中 0 表示没有占位,1 表示占位

10000010

输出描述

2

输出数值表示还能坐几个人

二、解题思路

使用贪心算法。遍历数组,在遍历过程中,采取贪心的思路,并不需要【每个位置】都去查看是否可以坐下。若当前位置已经有人坐下,则后一个位置明显不能坐下,可以跳过去;若当前位置没有人坐下,则需要考虑该位置两侧座位情况。

三、详细代码

def max_audience(seats):
    '''

    :param seats: 某排座位落座情况,一维数组
    :return: 还能落座的座位数
    '''
    max_audience = 0
    i = 0

    # 遍历整排座位落座情况
    while i < len(seats):
        # 某座位无人,则判断其两侧座位情况
        if seats[i] == 0:
            # 对于该位置左右两边的位置情况用bool值表示
            is_left_empty = i == 0 or seats[i - 1] == 0  # 考虑最左边边界位置
            is_right_empty = len(seats) - 1 or seats[i + 1] == 0  # 考虑最右边边界位置

            # 该座位两侧座位均是空位时,可落座人数加1,更新该座位情况,
            if is_left_empty and is_right_empty:
                max_audience += 1
                seats[i] == 1
                i += 1  # 此时的i用来表明'间隔'落座,所以一位置落座之后,下一位置判断可直接跳过

        # 此时的i用来遍历整个数组
        i += 1

    return max_audience

def main():
    seats = list(map(int, input().strip()))
    max_audience_count = max_audience(seats)
    print(max_audience_count)


if __name__ == "__main__":
    main()

四、不熟悉的地方

strip()和split()的区别

seats = list(map(int, input().strip()))
seats_1 = list(map(int, input().split()))
print(seats)
print(seats_1)

运行结果

#输入
10001
10001
#输出
[1, 0, 0, 0, 1]
[10001]

如果想用split()达到同样的效果,则输入需要改成

10001
1 0 0 0 1

运行结果

[1, 0, 0, 0, 1]
[1, 0, 0, 0, 1]

参考:python -- strip(), split()用法_python strip().split-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值