【力扣】第三大的數

問題描述:

給定一個非空數組,返回此數組中第三大的數。如果不存在,則返回數組中最大的數。要求算法時間複雜度必須是O(n)。

示例:

示例 1:

輸入: [3, 2, 1]

輸出: 1

解釋: 第三大的數是 1.

示例 2:

輸入: [1, 2]

輸出: 2

解釋: 第三大的數不存在, 所以返回最大的數 2 .

示例 3:

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

輸出: 1

解釋: 注意,要求返回第三大的數,是指第三大且唯一出現的數。存在兩個值爲2的數,它們都排第二。

分析:

對一個只有3個元素的TreeSet進行分析,

  1. 如果大於三個元素就就把Set中的最小值remove掉。
  2. 最後如果Set中元素小於3就返回Set最大值,否則返回最小值。

代碼:

import java.util.*;
class Solution {
    public int thirdMax(int[] nums) {
        TreeSet<Integer> set = new TreeSet<>();
        for(int num:nums){
            set.add(num);
        }
        if(set.size()<3){
            return set.last();
        }else{
            set.remove(set.last());
            set.remove(set.last());
             return set.last();
        }
       
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章