美文网首页
查找数组中倒数第二小的数

查找数组中倒数第二小的数

作者: leilifengxingmw | 来源:发表于2020-02-29 13:38 被阅读0次

问题描述:查找数组中倒数第二小的数要求时间复杂度为O(n)。

解题思路

  1. 定义一个长度为2的数组arr,用来存放两个最小的数字,默认两个元素值都为 int.MAX_VALUE。arr[0]表示最小的数,arr[1]表示倒数第二小的数。
  2. 在遍历数组的过程中,如果数组的元素arr[i]小于arr[0],那么就将arr[0]赋值给arr[1],然后将arr[i]赋值给arr[0]。
  3. 在遍历数组的过程中,如果数组的元素arr[i]大于arr[0]小于arr[1],那么就只更新arr[1],将arr[i]赋值给arr[1]。
  4. 遍历结束后,arr[1]就是倒数第二小的数。

完整实现

public class FindSecondLastSmallNum {

    private static int[] arr = {3, 9, 4, 5, 6, 8, 7};

    public static void main(String[] args) {

        System.out.println(find1(arr));

        System.out.println(find2(arr));
    }


    /**
     * 定义一个长度为2的数组,用来存放两个最小的数字,默认两个元素值都为 int.MAX_VALUE
     *
     * @param arr 原始数组
     */
    public static int find1(int[] arr) {
        //存放最小的两个数值
        int[] minNum = new int[2];
        //最小数值
        minNum[0] = Integer.MAX_VALUE;
        //第二小数值
        minNum[1] = Integer.MAX_VALUE;
        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            if (minNum[0] > arr[i]) {
                minNum[1] = minNum[0];
                minNum[0] = arr[i];
            } else if (minNum[1] > arr[i]) {
                minNum[1] = arr[i];
            }
        }
        return minNum[1];
    }


    /**
     * 初始化2个最小值:min1、min2。min1代表最小的数,min2代表倒数第二小的数
     * 遍历所有元素,如果当前元素小于min1,那么将更新min1、min2。
     * 如果大于min1小于min2只更新min2即可。
     */
    public static int find2(int[] arr) {
        int min1; //存储最小的数值
        int min2; //存储第二小的数值

        //判断前两个大小
        if (arr[0] >= arr[1]) {
            min2 = arr[0];
            min1 = arr[1];
        } else {
            min2 = arr[1];
            min1 = arr[0];
        }
        for (int i = 2; i < arr.length; i++) {
            //比最小值小的情况
            if (arr[i] < min1) {
                min2 = min1;
                min1 = arr[i];
            }
            //大于最小值且小于第二最小值
            if (arr[i] > min1 && arr[i] < min2) {
                min2 = arr[i];
            }
        }
        return min2;
    }
}

参考链接:

  1. 数据结构【数组】(二):查找数组中第二小的元素

相关文章

  • 查找数组中倒数第二小的数

    问题描述:查找数组中倒数第二小的数要求时间复杂度为O(n)。 解题思路 定义一个长度为2的数组arr,用来存放两个...

  • 数据结构和算法面试题整理

    #数组 - [查找数组中第二小的元素] - [查找第一个没有重复的数组元素] - [合并 2 个排序好的数组] -...

  • 数据结构面试题1

    一、数组 1、查找数组中第2小的元素 (1)堆排序 (2)遍历找第一小的,第一小的存下来再遍历找第二小的 2、查找...

  • 第二大数--(搜狐畅游2018)

    题目:输入n个数,查找数组中第二大的数;输入描述:第一行n表示n个数,第二行n个空格隔开的数输入描述:输出第二大的...

  • 排序算法(2)-冒泡排序

    原理: 冒泡排序的思想,是让最大的数浮动到数组最后的位置,其次大的数浮动到数组倒数第二个位置…… 当然,你也可以从...

  • 查找

    查找 折半查找: 面试题: 给定一个有序的数组,如果往该数组中存储一个数,并保证这个数组还是有序的,那么这个元素的...

  • [09]第二大的数-搜狐畅游2018秋

    1.题目描述 输入 n 个整数,查找数组中第二大的数 输入描述:第一行 n 表示 n 个数,第二行 n 个空格隔开...

  • C语言-在数组中查找一个给定的数(顺序查找法)

    问题描述:在数组中查找一个给定的数(顺序查找法) 源代码: 运行结果: 程序参数: 输出大小: 149.55078...

  • Leetcode.378.Kth Smallest Elemen

    题目 给定一个二维数组, 数组的每行每列都是递增的, 找到倒数第k小的数. 思路 采用二分法, 先找到中间大小的数...

  • mongodb查询场景总结

    假设demo表结构如下: 1,查找数组里面所有条目,id字段不是数组。查找所有id是1,2,3的数据。 2,查找数...

网友评论

      本文标题:查找数组中倒数第二小的数

      本文链接:https://www.haomeiwen.com/subject/jqephhtx.html