Given a non-empty array of integers, return thethird 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. public int thirdMax(int[] nums) { int one, two, three, count = 0; one = two = three = Integer.MIN_VALUE; for (int x : nums) { //若相同继续循环,要有count判断,因为nums中可能有Integer.MIN_VALUE if (x == one && count >= 1 || x == two && count >= 2 || x == three && count >= 3) continue; if (x > one) { three = two; two = one; one = x; count++; } else if (x > two) { three = two; two = x; count++; //此处一定是有等于的,若没有有可能露掉 //int nums[] = { 1, 2, Integer.MIN_VALUE };缺少一次判断 } else if (x >= three) { three = x; count++; } } //count 代表更新的次数,若大于等于3,表示有第三大的数 if (count >= 3) return three; else return one; }