Given an integer array nums, return the third distinct maximum number in this array. If the third maximum does not exist, return the maximum number.
Example 1:
Input: nums = [3,2,1]
Output: 1
Explanation:
The first distinct maximum is 3.
The second distinct maximum is 2.
The third distinct maximum is 1.
Example 2:
Input: nums = [1,2]
Output: 2
Explanation:
The first distinct maximum is 2.
The second distinct maximum is 1.
The third distinct maximum does not exist, so the maximum (2) is returned instead.
Example 3:
Input: nums = [2,2,3,1]
Output: 1
Explanation:
The first distinct maximum is 3.
The second distinct maximum is 2 (both 2's are counted together since they have the same value).
The third distinct maximum is 1.
Constraints:
- 1 <= nums.length <= 104
- -231 <= nums[i] <= 231 - 1
My Solution
We can first sort the array and then find the third largest distinct number. If the third largest distinct number doesn’t exist, we just return the largest number.
Time complexity is O(n * log n) because we first sort the array. Space complexity is O(1) since we only require constant extra space.
class Solution {
public int thirdMax(int[] nums) {
Arrays.sort(nums);
int n = nums.length;
int i = n-1;
for (int j = 0; j < 2; j++) {
int max = nums[i];
while (i >= 0 && nums[i] == max) {
i--;
}
if (i < 0) {
return nums[n-1];
}
}
return nums[i];
}
}