📜  算法|算法分析|问题17(1)

📅  最后修改于: 2023-12-03 14:56:43.468000             🧑  作者: Mango

算法分析问题17

题目描述

输入$n$个正整数,输出它们中的最大值和次大值。($n \geq 2$)

算法分析

这道题目需要求出$n$个数中的最大值和次大值,最直观的想法是遍历一遍数组,找出最大值和次大值。

int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
    if (nums[i] > max1) {
        max2 = max1;
        max1 = nums[i];
    } else if (nums[i] > max2) {
        max2 = nums[i];
    }
}

其中$max1$为当前已经遍历过的最大值,$max2$为次大值,如果当前数字大于$max1$,则将$max1$更新为当前数字,同时将$max2$更新为原本的$max1$;如果当前数字大于$max2$,则将$max2$更新为当前数字。

时间复杂度是$O(n)$。

总结

本题使用遍历一遍数组的思路即可实现,时间复杂度为$O(n)$。