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: 1Explanation: Note that the third maximum here means the third maximum distinct number. Both numbers with value 2 are both considered as second maximum.
问题描述,给定要给非空数组,找出第三大的数,如果找不到则返回最大值。
思路:用三个数分别存最大 第二 第三大的值。但是由于数组中会出现int的最小边界值。所以干脆用long类型来存储前三个值。
public int ThirdMax(int[] nums) { long max = long.MinValue; long sec = long.MinValue; long third = long.MinValue; for(int i = 0; i < nums.Length; i++){ int temp = nums[i]; if(temp > max){ third = sec; sec = max; max=temp; } else if(temp < max && temp >sec){ third = sec; sec=temp; } else if(temp < sec && temp >=third){ third = temp; } } return third > long.MinValue ? (int)third : (int)max; }