zoukankan      html  css  js  c++  java
  • 414. Third Maximum Number

    Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in (O(n)).

    Example 1:

    Input: [3, 2, 1]
    
    Output: 1
    
    Explanation: The third maximum is 1.
    

    Example 2:

    Input: [1, 2]
    
    Output: 2
    
    Explanation: The third maximum does not exist, so the maximum (2) is returned instead.
    

    Example 3:

    Input: [2, 2, 3, 1]
    
    Output: 1
    
    Explanation: Note that the third maximum here means the third maximum distinct number.
    Both numbers with value 2 are both considered as second maximum.
    

    自己的笨方法, 粗暴, 易理解, 且符合题目要求:

    使用了set.
    
    扫描三遍数组:
    第一遍: 找出max, 并依次把每个元素送入set, 若 set.size() < 3, 返回max;
    第二遍找出sec, 第三遍找出third;
    返回 third.
    

    (O(n)) time, (O(n)) extra space.

    int thirdMax(vector<int>& A) {
        int i, n = A.size();
        int max = INT_MIN, sec = INT_MIN, third = INT_MIN;
        set<int> set;
    
        for (i = 0; i < n; i++) {
            set.insert(A[i]);
            max = max > A[i] ? max : A[i];
        }
    
        if (set.size() < 3) return max;
    
        for (i = 0; i < n; i++)
            if (A[i] != max)
                sec = sec > A[i] ? sec : A[i];
    
        for (i = 0; i < n; i++)
            if (A[i] != max && A[i] != sec)
                third = third > A[i] ? third : A[i];
    
        return third;
    }
    

    人家的精巧方法:
    用到set, set.erase(), set.begin(), set.rbegin()
    set 默认升序. set.rbegin()表示最后一个元素的迭代器(指针).
    (O(n)) time, (O(n)) extra space.

    int thirdMax(vector<int>& A) {
        set<int> top3;
        for (int i = 0; i < A.size(); i++) {
            top3.insert(A[i]);
            // set 默认按 key 升序排序
            if (top3.size() > 3) top3.erase(top3.begin());
        }
        return top3.size() == 3 ? *top3.begin() : *top3.rbegin();
    }
    
  • 相关阅读:
    MySQL多实例配置
    MySQL8.0启动和关闭流程
    MySQL8.0初始化配置方式 ——维护使用
    MySQL多种连接方式
    MySQL 8.0用户及安全管理
    MySQL 5.7安装及版本升级到8.0
    五十六、linux 编程——UDP 编程模型
    五十五、linux 编程——TCP 连接和关闭过程及服务器的并发处理
    五十四、linux 编程——TCP 编程模型
    五十三、linux 编程——TCP 编程基本介绍
  • 原文地址:https://www.cnblogs.com/ZhongliangXiang/p/7358716.html
Copyright © 2011-2022 走看看