414. Third Maximum Number
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 public int thirdMax(int[] nums) { 2 Integer max1 = null; 3 Integer max2 = null; 4 Integer max3 = null; 5 for (Integer n:nums) 6 { 7 if (n.equals(max1) || n.equals(max2) || n.equals(max3)) continue; 8 if (max1 == null || n > max1) 9 { 10 max3 = max2; 11 max2 = max1; 12 max1 = n; 13 }else if (max2 == null || n > max2) 14 { 15 max3 = max2; 16 max2 = n; 17 }else if (max3 == null || n > max3) 18 { 19 max3 = n; 20 } 21 } 22 return max3 == null?max1:max3; 23 }
方法二:
1 public int thirdMax(int[] nums) { 2 if (nums.length==0) return 0; 3 Set<Integer> temp =new TreeSet<Integer>(new Comparator<Integer>() { 4 @Override 5 public int compare(Integer o1, Integer o2) { 6 return o1.compareTo(o2); 7 } 8 }); 9 for (Integer number:nums) temp.add(number); 10 List<Integer> values = new ArrayList<>(temp); 11 return values.size()<3?values.get(values.size()-1):values.get(values.size()-3); 12 }