#12031. Find the Second Smallest / 寻找第二小的问题
Find the Second Smallest / 寻找第二小的问题
Problem J44: Find the Second Smallest / 寻找第二小的问题
版权信息: · 分治法 & 基础数组题
任务总览
任务名称 | 时间限制 | 内存限制 | 分数 |
---|---|---|---|
寻找第二小的整数 | 1 sec | 1024 MB | 10 points |
题目描述
在许多实际场景中,经常需要找出“第二名”或者“第二小”的数,例如:
- 排名第二的成绩;
- 第二低的温度读数;
- 第二小的股价涨幅。
现在,给你一个长度为 的整数序列,请你找出其中的 第二小的整数 并输出。
输入格式
*第 行:一个正整数 ,表示整数序列的长度();
- 第 行: 个整型范围内的整数,表示该序列。
输出格式
输出一个整数,为该序列中 第二小的值 。
输入输出样例
输入示例
10
45 785 15 65 439 62 168 6 521 36
输出示例
15
题目分析与解法
✅ 方法一:顺序遍历(推荐)
- 初始化两个变量
min1
和min2
:
min1
存最小值;min2
存第二小值;
- 遍历数组,更新
min1
和min2
:
-
如果当前值 <
min1
:更新min2 = min1
, 再更新min1 = 当前值
;- 否则如果当前值 <
min2
且 ≠min1
:更新min2
;
- 遍历结束后,输出
min2
即可。
- 时间复杂度 :,一次扫描即可;
- 空间复杂度 :。
✅ 方法二:分治法(二分分组)
- 将数组分为两组;
- 各组找出最小值与次小值;
- 将两组的结果合并,在这 四个数 中找出全局最小和次小;
- 返回次小结果。
- 虽不比顺序法快,但体现了分治思想;
- 实现上也可用于并行处理优化。
- 否则如果当前值 <