給你一個非空數組,返回此數組中 第三大的數 。如果不存在,則返回數組中最大的數
方法一
首先將數組排序,然后通過集合去除重復的元素,最后進行一次判斷,選擇第三大元素還是最大元素
class Solution {public int thirdMax(int[] nums) {List<Integer> list = new ArrayList<>();int n = nums.length;int res = 0;Arrays.sort(nums);for(int i = n-1;i>=0;i--){//去除重復的元素if(!list.contains(nums[i])){list.add(nums[i]);}}//有第三大元素if(list.size()>=3){res = list.get(2);}else{//沒有第三大元素res = list.get(0);}return res;}
}
方法二
根據官方答案改的
class Solution {public int thirdMax(int[] nums) {int n = nums.length;int res = 0;Arrays.sort(nums);int flag = 0; if(n==1){return nums[0];}for(int i = n-1;i>=1;i--){if(nums[i]!=nums[i-1]&&++flag==2){return nums[i-1];}}return nums[n-1];}
}
關鍵是nums[i]!=nums[i-1]&&++flag==2不好想