问题:
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.
思路1:
利用TreeSet的自动升序功能,以及元素不重复原理,,其中涉及到迭代。时间复杂度是O(n)
代码如下:
public class Solution {
public int thirdMax(int[] nums) {
Set<Integer> set = new TreeSet<Integer>();
for(int i= 0 ; i < nums.length;i++){
set.add(nums[i]);
}
Iterator it = set.iterator();
if(set.size() == 2){
int a = (Integer)it.next();
int b = (Integer)it.next();
return b;
}
else if(set.size() == 1){
int c = (Integer)it.next();
return c;
}else{
int count =0;
int d =0;
while(it.hasNext()){
d = (Integer)it.next();
count++;
System.out.println(count + " size" +set.size());
if(set.size()==count+2){
break;
}
}
return d;
}
}
}
思路2:
代码如下:
public int thirdMax(int[] nums) {
if (length == 1) {
return nums[0];
} else if (length == 2) {
int max = Math.max(nums[0], nums[1]);
return max;
} else {
int []a = new int[length];
List<Integer>list = new ArrayList<Integer>();
for(int i = 0 ; i < length;i++){
a[nums[i]-1]=nums[i];
}
for(int j = length-1; j >=0;j++){
if(!list.contains(nums[j]))
list.add(nums[j]);
}
for(int m = 0; m < length;m++){
System.out.println(list.get(m));
}