版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zw159357/article/details/82111539
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
示例 1:
输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1.
示例 2:
输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 .
示例 3:
输入: [2, 2, 3, 1] 输出: 1 解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。 存在两个值为2的数,它们都排第二。
题解:先将数组按递增排序,从后往前遍历,经历三个不同的数,最后那个数就是要求的结果。
class Solution {
public int thirdMax(int[] nums) {
int n=nums.length;
Arrays.sort(nums);
int step=1;
for(int i=n-1;i>0;i--){
if(nums[i]!=nums[i-1])
step++;
if(step==3)
return nums[i-1];
}
return nums[n-1];
}
}