2024-09-01
算法刷题
00

介绍:

https://www.cnblogs.com/frankchenfu/p/7107019.html

应用

在这里插入图片描述

python
import bisect def max_order(lists): list_num = [] list_max = [] for i in lists: # bisect_left把i插入list_num,使得list_num还是升序,返回index。insort才是就地插入 local = bisect.bisect_left(list_num, i) if local == len(list_num): # 最后一个 list_num.append(i) # 最大值放最后 list_max.append(local + 1) # 记录每个元素插在哪个位置了 else: list_num[local] = i # 不是最大就替换,给后面更多机会 list_max.append(local + 1) # 记录每个元素插在哪个位置了 return list_max while True: try: people_num = int(input()) height_list = list(map(int, input().split())) result_1 = max_order(height_list) # 升序最长 result_2 = max_order(height_list[::-1])[::-1] # 降序最长 print(people_num - max(map(sum, zip(result_1, result_2))) + 1) except BaseException as er: # print("fault line is", er.__traceback__.tb_lineno) break

输入

8

186 186 150 200 160 130 197 200

最后

result_1

[1, 1, 1, 2, 2, 1, 3, 4]

result_2

[3, 3, 2, 3, 2, 1, 1, 1]

所以要出队这么多人:

4

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!