输入n个数,最坏情况下用 n + logn - 2 次比较找出当中的最大值和次大值(3种做法)

本文探讨了如何在最坏情况下使用n + logn - 2次比较找出一组数中的最大值和次大值。通过递归、线性时间和竞赛思想的算法进行分析,最终提出在分组比赛过程中同时寻找最大值和次大值以避免最坏情况的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个题我一开始是递归 从底层出发 比到顶层 显然时间复杂度不允许


后来想了一种n时间复杂度的

开两个数用来维护最大值和最小值就可以了,什么意思呢

比如 1 3 6 2 8 4 0 0 8是我们要求的数组

int last = Integer.Min_Value;

int cur = Integer.Min_Value;

分别代表了上一个最大值和当前最大值

我们走到a[0] cur = 1

到a[1] cur=3 last = 1

继续走 cur=6 last=3

...

维护到最后,这两个数就是最大值和次大值了


但是既然要求的是n+logN,那就用竞赛的思想(网上看的)

分析:

例如这n(n=8)个数分别是:8 7 9 2 3 6 10 12

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值