任务
给出了 N 个数字。查找序列中第二大的元素。
这个问题有两种解释。
例如,如果给我们一组数字:
\(10\ 15\ 20\ 35\ 14\ 35\ 10\),那么答案应该是什么?
在“第二大元素”下或者简称“次大”,可以理解为:
1) 如果我们将所有值\u200b\u200bin 非降序排列(排序)(每一个都大于或等于前一个),将会在倒数第二位的值。那么对于所考虑的一组数字,答案将是值 35;
2) 元素的值,仅大于最大值。那么答案是20。
如果数字集合中只有一个最大元素(其他的都更少),那么两种解释都是一样的,两种情况的答案都是一样的,否则答案是不同的。
考虑第一种情况(我们将在
伪代码).
为了找到答案,我们将使用两个变量:
1)
maximum1
——最大值(第一个最大值);
2)
maximum2
- 第二个最大值(我们的答案)。
如果值变化的范围是已知的,那么我们取一个明显小于范围下限的数字作为初始值(例如,范围从
-1000
到
1000
-取数
-1001
)
如果取值范围未知,那么可以将前两个输入的数分别写入变量
max1
和
max2
的初始值,然后比较这些两个变量。
<前>
input N //数字个数
输入 a, b
最大值 1 = 一个
最大值2 = b
如果 b >一个,然后
最大值 1 = b
max2 = 一个
接下来,我们考虑所有其他元素(前2个已经看过,所以我们从第3个开始)
<前>
nc 代表我从 3 到 n
输入一个
如果一个> maximum1 //有一个值大于maximum1
那
max2 = max1 //之前的第一个高点变成第二个
max1 = a //新元素将是第一个最大值
否则
//下一个元素不超过max1
// 需要和maximum2值比较
如果一个>最多 2
那
max2 = a //作为新值max2
// 在这种情况下 max1 不会改变
全部
全部
节拍
尝试自己实现这个算法。