问题 B: 分金块
题目描述
有一个老板有一袋金块。
每个月将有两名雇员会因其优异的表现分别被奖励一个金块。
按规矩,排名第一的雇员将得到袋中最重的金块,
排名第二的雇员将得到袋中最轻的金块。
根据这种方式,除非有新的金块加入袋中,
否则第一名雇员所得到的金块总是比第二名雇员所得到的金块重。
如果有新的金块周期性的加入袋中,则每个月都必须找出最轻和最重的金块。
假设有一台比较重量的仪器,我们希望用最少的比较次数找出最轻和最重的金块。
本题要求用二分算法完成。
输入
输入数据有多行,第一行为金块个数n(2<=n<=5000000),接下来n行是n个金块的重量。
输出
输出最重的金块和最轻的金块,用空格隔开。
样例输入
8
10
8
2
4
5
3
9
1
样例输出
10 1
解答(分治算法):
# 二分法求列表ls在[lt,rt]内的最大值和最小值
def max_min(ls, lt, rt, res):

该博客介绍了如何利用二分算法在一组金块中找到最重和最轻的金块,以最小的比较次数完成任务。给定一个包含金块重量的列表,通过递归的二分法实现,首先判断区间元素个数,然后对左右子区间分别进行二分查找,最后合并结果。提供的代码示例展示了具体的实现过程。
最低0.47元/天 解锁文章
2416

被折叠的 条评论
为什么被折叠?



