【数组】414. 第三大的数

题目:

 

 

解答:

方法一:

利用set中元素的有序性和唯一性,将元素放入set中,若set的size不小于3输出倒数第三个元素;若set的size小于3,输出最后一个元素。

 1 class Solution {
 2 public:
 3     int thirdMax(vector<int>& nums) 
 4     {
 5         set<int> s(nums.begin(), nums.end());
 6         auto it = s.end();
 7         it--;
 8         if(s.size() >= 3){
 9             it--;
10             it--;
11         }
12         return *it;
13     }
14 };

 

方法二:

用三个变量记录最大的三个数,遍历的同时更新。

 1 class Solution {
 2 public:
 3     int thirdMax(vector<int>& nums) 
 4     {
 5         long big, mid, small;    //最大,第二大,第三大
 6         big = mid = small = 1l << 63;
 7 
 8         for(int i : nums)
 9         {
10             if(i > big)
11             {
12                 small = mid;
13                 mid = big;
14                 big = i;
15             }
16             else if(i > mid && i != big)
17             {
18                 small = mid;
19                 mid = i;
20             }
21             else if(i > small && i != mid && i != big)
22             {
23                 small = i;
24             }
25         }
26         return (small == 1l << 63) ? (int)big : (int)small;
27     }
28 };

 

 

posted @ 2020-05-04 17:17  梦醒潇湘  阅读(178)  评论(0)    收藏  举报