1. 程式人生 > 其它 >力扣414(java)-第三大的數(簡單)

力扣414(java)-第三大的數(簡單)

題目:

給你一個非空陣列,返回此陣列中 第三大的數 。如果不存在,則返回陣列中最大的數。

示例 1:

輸入:[3, 2, 1]
輸出:1
解釋:第三大的數是 1 。
示例 2:

輸入:[1, 2]
輸出:2
解釋:第三大的數不存在, 所以返回最大的數 2 。
示例 3:

輸入:[2, 2, 3, 1]
輸出:1
解釋:注意,要求返回第三大的數,是指在所有不同數字中排第三大的數。
此例中存在兩個值為 2 的數,它們都排第二。在所有不同數字中排第三大的數為 1 。

提示:

1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/third-maximum-number
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題思路:

方法一:

1.先使用氣泡排序,將陣列中數按大到小的順序排列;

2.定義一個新陣列,去掉陣列中重複的數,放入新陣列中;

3.直接輸出第三個數即可。

程式碼1:

但是有點超時了,測試用例沒全過,不知道為啥還通過了?

方法二:

是看了官方的解釋寫的:

用一個有序集合(TreeSet)儲存陣列中前三大的數。具體做法是遍歷整個陣列,每遍歷一個數,就將該數插入有序集合,若有序集合的大小超過 3,就刪除集合中的最小元素。這樣可以保證有序集合的大小至多為 3,且遍歷結束後,若有序集合的大小等於3,其最小值就是陣列中第三大的數;若有序集合的大小小於3,那麼就返回有序集合中的最大值。

程式碼2:

小知識:

1.氣泡排序,很重要的排序方法,注意每一輪排序都會產生一個最大值,所以內層迴圈需要減去i;

2.TreeSet 是一個有序的集合,它的作用是提供有序的Set集合。

3.for-each迴圈:

for(陣列型別 變數x :陣列名){     引用了變數x的java語句;    } 4.java中的三目運算: 表示式1?表示式2:表示式3; 執行順序:先求解表示式1,若表示式1條件為真,則求表示式2,此時表示式2的值就作為整個語句的結果,否則表示式3 的值作為整個語句的結果。