• LeetCode 414 Third Maximum Number


    Problem:

    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.

    Summary:

    找出整形数组中第三大的数,若存在第三大的数则返回该数,否则返回最大的数。

    注意所谓的“大”为严格意义上的大于,大于等于的关系不成立。

    Solution:

    1. 首先将数组从大到小排序,然后从头遍历去掉重复数字,同时用一个指针记录当下去掉重复数字后的索引值。最后判断新数组中数字个数是否大于3即可。

     1 class Solution {
     2 public:
     3     static bool descending (int i, int j) { //自定义排序函数,此处应为static,否则报错
     4         return i > j;
     5     }
     6     
     7     int thirdMax(vector<int>& nums) {
     8         int len = nums.size();
     9         sort(nums.begin(), nums.end(), descending);
    10         //sort(nums.begin(). nums.end(), greater<int>());
    11         
    12         int j = 1;
    13         for (int i = 1; i < len; i++) {
    14             if(nums[i] < nums[i - 1]) {
    15                 nums[j] = nums[i];
    16                 j++;
    17             }
    18         }
    19         
    20         return j > 2 ? nums[2] : nums[0];
    21     }
    22 };

    2. 用set维护当前的三个最大值,由于set有去重和自动从小到大排序的功能,可以再size大于3时去掉最小的,即当前的第四大数。

     1 class Solution {
     2 public:
     3     int thirdMax(vector<int>& nums) {
     4         int len = nums.size();
     5         set<int> s;
     6         for (int i = 0; i < len; i++) {
     7             s.insert(nums[i]);
     8             if (s.size() > 3) {
     9                 s.erase(s.begin());
    10             }
    11         }
    12         
    13         return s.size()==3 ? *s.begin() : *s.rbegin();
    14     }
    15 };

    参考:http://www.cnblogs.com/grandyang/p/5983113.html

    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.
  • 相关阅读:
    ◆◆0凭证(Tcode)跳转(SET PARAMETER ID)
    [问题解决]ALV新加字段不显示
    8-Noise & Error
    5-ML的可行性(2)
    4-ML的可行性(1)
    6-ML的可行性(3)
    1-ML的基本概念
    基于SmartQQ协议的QQ聊天机器人-8
    基于SmartQQ协议的QQ聊天机器人-7
    基于SmartQQ协议的QQ聊天机器人-6
  • 原文地址:https://www.cnblogs.com/VickyWang/p/6228193.html
Copyright © 2020-2023  润新知