题目
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
示例 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
解题思路
1、先对数组从小到大排序
2、判断nums的大小
若nums.length<3,说明数组中第三大的数不存在,则返回最大的数,即nums[nums.length-1]。
否则需要输出数组中第三大的数。
1)反转数组,使得数组从大到小排序。
2)用一个计数器cnt=1,从数组的第二位开始找,若nums[i]!=nums[i-1],则num[i]为第cnt大的数,每次找到cnt自增1次。
3)当cnt=3时,说明已经找到第cnt大的数,则输出nums[i]。
代码
class Solution {
public int thirdMax(int[] nums) {
Arrays.sort(nums);
int len=nums.length;
if(len<3)
return nums[len-1];
else{
reverse(nums);
int cnt=1;
for(int i=1;i<len;i++){
if(nums[i]!=nums[i-1])
cnt++;
if(cnt==3)
return nums[i];
}
}
return nums[0];
}
public void reverse(int[] nums){
int left=0;
int right=nums.length-1;
while(left<right){
int temp=nums[left];
nums[left]=nums[right];
nums[right]=temp;
left++;
right--;
}
}
}
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/third-maximum-number