arrays - 如何在一次迭代中找到数组中的第二个最大元素?

标签 arrays algorithm max array-algorithms

我需要一次迭代中未排序数组中的第二大元素。 例如:数组是 3 9 8 2 0 -4 87 45 3 2 1 0 答案应该是45,在一次迭代中找到最大元素很简单,但是如何在同一次迭代中找到第二个最大值,或者在数组的fort迭代后的恒定时间。

最佳答案

int sz = arr.size();
assert(sz >= 2);
int maxElem = arr[0];
int secElem = arr[1];
if (maxElem < secElem) swap(maxElem, secElem);

for (int i = 2; i < sz; ++i) {
    if (arr[i] > maxElem) {
        secElem = maxElem;
        maxElem = arr[i];
    } else if (arr[i] == maxElem) {
        secElem = maxElem;
    } else if (arr[i] < maxElem && arr[i] > secElem)) {
        secElem = arr[i];
    }
}

关于arrays - 如何在一次迭代中找到数组中的第二个最大元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25518930/

相关文章:

arrays - SSJS 从数组中删除项目

algorithm - 寻路算法难度

java - 以最低成本记录最佳网格路径

java - 数组中最大的偶数

c++ - 查找指向数组最大值的指针

JavaScript循环从数组中随机选择

Javascript/JSPerf 循环性能

arrays - 在 Perl 中,如何创建一个其键来自给定数组的散列?

algorithm - MongoDB 使用什么算法来散列 ObjectId?

python - python字典中的5个最大值