Welcome to Subscribe On Youtube
414. Third Maximum Number
Description
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
Follow up: Can you find an O(n)
solution?
Solutions
-
class Solution { public int thirdMax(int[] nums) { long m1 = Long.MIN_VALUE; long m2 = Long.MIN_VALUE; long m3 = Long.MIN_VALUE; for (int num : nums) { if (num == m1 || num == m2 || num == m3) { continue; } if (num > m1) { m3 = m2; m2 = m1; m1 = num; } else if (num > m2) { m3 = m2; m2 = num; } else if (num > m3) { m3 = num; } } return (int) (m3 != Long.MIN_VALUE ? m3 : m1); } }
-
class Solution { public: int thirdMax(vector<int>& nums) { long m1 = LONG_MIN, m2 = LONG_MIN, m3 = LONG_MIN; for (int num : nums) { if (num == m1 || num == m2 || num == m3) continue; if (num > m1) { m3 = m2; m2 = m1; m1 = num; } else if (num > m2) { m3 = m2; m2 = num; } else if (num > m3) { m3 = num; } } return (int) (m3 != LONG_MIN ? m3 : m1); } };
-
class Solution: def thirdMax(self, nums: List[int]) -> int: m1 = m2 = m3 = -inf for num in nums: if num in [m1, m2, m3]: continue if num > m1: m3, m2, m1 = m2, m1, num elif num > m2: m3, m2 = m2, num elif num > m3: m3 = num return m3 if m3 != -inf else m1
-
func thirdMax(nums []int) int { m1, m2, m3 := math.MinInt64, math.MinInt64, math.MinInt64 for _, num := range nums { if num == m1 || num == m2 || num == m3 { continue } if num > m1 { m3, m2, m1 = m2, m1, num } else if num > m2 { m3, m2 = m2, num } else if num > m3 { m3 = num } } if m3 != math.MinInt64 { return m3 } return m1 }