【算法面试】获取数组第二大数

获取数组第二大数

程序 = 数据结构 + 算法

​ 工作多年,尤其是常年在业务代码中CURD的程序猿们,几乎用不到算法相关的知识。但是面试过程中算法又是最基本的面试题。尤其是一些大厂,算法就是敲门砖。因此,掌握好算法才能够有基本的面试资格。笔者根据近期一段时间的面试,总结常见的一些基础面试算法题,希望可以帮到有需要的朋友。

问题:写一个函数求数组(乱序)第二大数,不能使用排序算法。

​ 遍历数组,每次遍历先去对比最大值,如果数组中的元素大于最大值,则更新前两大数,继续遍历数组。

如果小于最大值,则与第二大数对比。如果大于第二大数,更新第二大数。

    /**
     * 获取数组第二大数
     *
     * @param array 查询的数组
     *
     * @return 第二大数
     */

    public static Integer getSecond(int[] array) {
        int max = array[0];
        int second = Integer.MIN_VALUE;
        // 遍历数组
        for (int i = 1; i < array.length; i++) {
            // 判断是否为最大数
            if (max < array[i]) {
                // 更新前两大数
                second = max;
                max = array[i];
                continue;
            }
            // 判断是否为第二大数
            if (second < array[i]) {
                // 更新第二大数
                second = array[i];
            }
        }
        return second;
    }