leetcode|第三大的数java题解
由于在面試作業幫、好未來側開實習面試的時候都被問到了這道題,所以我就來寫個題解吧
給你一個非空數組,返回此數組中 第三大的數 。如果不存在,則返回數組中最大的數。
示例 1:
輸入:[3, 2, 1] 輸出:1 解釋:第三大的數是 1 。 示例 2:
輸入:[1, 2] 輸出:2 解釋:第三大的數不存在, 所以返回最大的數 2 。 示例 3:
輸入:[2, 2, 3, 1] 輸出:1 解釋:注意,要求返回第三大的數,是指在所有不同數字中排第三大的數。 此例中存在兩個值為 2
的數,它們都排第二。在所有不同數字中排第三大的數為 1 。
提示:
1 <= nums.length <= 104
-2 ^ 31 <= nums[i] <= 2 ^ 31 - 1
進階:你能設計一個時間復雜度 O(n) 的解決方案嗎?
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/third-maximum-number
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
分析此題:找第三大的數
分為兩種情況:
存在第三大的數,返回第三大的數;
不存在第三大的數,返回第一大的數;不存在的情況主要是,數組長度小于等于2和數組去重元素之后長度小于等于2;
題解一:
設置max1,max2,max3為null,主要是為了好判斷是否被賦值,通過遍歷一次數組實現O(n)的時間復雜度。
使用Integer的原因是Integer的最大值和最小值剛好滿足題目數據的要求。
public int thirdMax(int[] nums) {Integer max1 = null, max2 = null,max3 = null;for (int i = 0 ;i < nums.length;i++){Integer cur = nums[i];if (cur.equals(max1) || cur.equals(max2) || cur.equals(max3))continue; //遇到重復元素的情況下if (max1 == null || cur > max1){max3 = max2;max2 = max1;max1 = cur;}else if (max2 == null || cur > max2){max3 = max2;max2 = cur;}else if (max3 == null || cur > max3){max3 = cur;}}return max3 == null ? max1 : max3;}題解二:
使用到了java中的數組排序和List集合,將數組排序后加入到list中,并且進行去重。此時就可以直接通過判斷list的size進行判斷是否存在第三大的數。
題解三:
這里使用到了Long,因為Long的最小值是-2^63 ,最大值是2^63 -1,使用Long不需要對最小值-2^31進行判斷。
總結
以上是生活随笔為你收集整理的leetcode|第三大的数java题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金华银行是属于什么银行 金华银行属于啥银
- 下一篇: 软件测试理论入门(一)