给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数
方法一
首先将数组排序,然后通过集合去除重复的元素,最后进行一次判断,选择第三大元素还是最大元素
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不好想