Python之最长递增字串及计算最少出列多少位同学,使得剩下的同学排成合唱队形

本文介绍了如何使用Python解决找到最长递增子串的问题,并进一步探讨如何计算最少出列多少位同学,使剩余同学能形成合唱队形。通过示例解析算法思路,提供相关Python代码实现。
摘要由CSDN通过智能技术生成
  1. 最长递增字串
    在一个给定的数值序列中,找到一个子序列,使得这个子序列元素的数值依次递增,并且这个子序列的长度尽可能地大。
  2. 例题解答
    假设序列为186 186 150 200 160 130 197 200
    首先计算每个数在最长递增子串中的位置
    186 186 150 200 160 130 197 200
    1 1 1 2 2 1 3 4
    计算每个数在反向最大递减子串中的位置
    200 197 130 160 200 150 186 186
    1 1 1 2 3 2 3 3 递减计数
    将每个数的递增计数和递减计数相加
    186 186 150 200 160 130 197 200
    1 1 1 2 2 1 3 4 递增计数
    3 3 2 3 2 1 1 1 递减计数
    4 4 3 5 4 2 4 5 每个数在所在队列的人数+1
    总人数 - 该数所在队列人数 = 需要出队的人数
    最少出队人数 = 总人数 - max(每个数所在队列的人数) + 1
  3. python代码块
def getNum(high_list):
    status = []
    for index in range(len(high_list)):  # 从第0个元素开始建立
        status.append(1)
        for preIndex in range(index):  # 从前面(第0个)元素中开始更新
            if high_list[preIndex] < high_list[index] and status[preIndex] + 1 > status[index]:
                # 如果当前元素小于元素,且更新后长度更长
                status[index] = status[preInde
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值