题目:
Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).
Example 1:
Input: [3, 2, 1] Output: 1 Explanation: The third maximum is 1.
Example 2:
Input: [1, 2] Output: 2 Explanation: The third maximum does not exist, so the maximum (2) is returned instead.
Example 3:
Input: [2, 2, 3, 1] Output: 1 Explanation: Note that the third maximum here means the third maximum distinct number. Both numbers with value 2 are both considered as second maximum.分析:
class Solution {
public int thirdMax(int[] nums) {
//给定非空数组,返回其第三大的元素,如果该元素不存在,则返回其最大的元素
//思路:数组排序后,去掉重复,需要设计count计算重复值,直接取倒数第三个元素
Arrays.sort(nums);
int [] dummy=new int[nums.length];
int count=0;
//将第一个元素赋值
dummy[0]=nums[0];
//记录dummy已经存的元素个数
int count2=1;
for(int i=1;i<nums.length;i++){
if(nums[i]==nums[i-1]){
count++;
}else{
//不相等直接将该元素添加进dummy
dummy[i-count]=nums[i];
count2++;
}
}
return count2<3?dummy[count2-1]:dummy[count2-3];
}
}