一、数组---第三大的数

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。

示例 1:

输入: [3, 2, 1]

输出: 1

解释: 第三大的数是 1.
示例 2:

输入: [1, 2]

输出: 2

解释: 第三大的数不存在, 所以返回最大的数 2 .
示例 3:

输入: [2, 2, 3, 1]

输出: 1

解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。

 

 1 class Solution {
 2 public:
 3     int thirdMax(vector<int>& nums) {
 4         int n=nums.size();
 5         long long third=LONG_MIN, second=LONG_MIN, first=LONG_MIN;
 6         for(int i=0;i<n;i++){
 7             if(nums[i]>first){
 8                 third = second;
 9                 second = first;
10                 first = nums[i];
11             }
12             else if(nums[i] > second && nums[i] < first){
13                 third = second;
14                 second = nums[i];
15             }
16             else if(nums[i] > third && nums[i] < second){
17                 third = nums[i];
18             }
19         }
20         if(third!=LONG_MIN) return third;
21         else return first;
22     }
23 };

 

posted @ 2019-06-11 15:57  Austin_anheqiao  阅读(569)  评论(0编辑  收藏  举报