難度:簡單
給定乙個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。要求演算法時間複雜度必須是o(n)。
示例 1:
輸入: [3, 2, 1]
輸出: 1
解釋: 第三大的數是 1.
示例 2:
輸入: [1, 2]
輸出: 2
解釋: 第三大的數不存在, 所以返回最大的數 2 .
示例 3:
輸入: [2, 2, 3, 1]
輸出: 1
解釋: 注意,要求返回第三大的數,是指第三大且唯一出現的數。
存在兩個值為2的數,它們都排第二。
1.用到排序,並不符合時間複雜度o(n)的條件
2.用三個變數儲存前三大的元素,若有則返回最小的,否則返回最大的(思路易想,但存在問題);這種思路有個問題在於第三大元素可能是最小值,這樣無法判斷第三大值是否存在,因此變數初值不好給定,可以用標識變數是否有修改(**不太優美)
3.用treeset實現(treeset有序且沒有重複元素)
//方法一
class
solution
for(int i = nums.length-
1; i >
0; i--)if
(temp ==3)
return nums[i-1]
;}return nums[nums.length-1]
;}}//方法二
class
solution
else
if(nums[i]
==max1)
continue
;else
if(nums[i]
> max2 || nums[i]
==max2 && flag2==0)
else
if(nums[i]
==max2)
continue
;else
if(nums[i]
> max3 || nums[i]
==max3 && flag3==0)
}if(flag3 >0)
return max3;
else
return max1;}}
//方法三
class
solution
return
set.
size()
<3?
set.
last()
:set
.first()
;}}
leetcode第三題筆記
無重複字元的最長子串 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。string s pwwkew int size,i 0,j,k,max 0 size s.size for j 0 jif j i 1 max max j i 1 思路其實跟滑動視窗一樣,外層的for迴圈作為視窗右...
leetcode演算法第三題
給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 s abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 s bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 s pwwkew...
Leetcode第三題 回文數
題目 判斷乙個整數是否是回文數。回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。直接用字串切片 class solution object defispalindrome self,x type x int rtype bool if x 0 return false else x s...