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