Leetcode 414 Third Maximum Number

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.

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.
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.
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.
  • Soruda bize verilen listedeki en büyük üçüncü sayıyı dönmemiz isteniyor ve bunu O(n) sürede yapmamız isteniyor.
  • Bir dolaşımda en büyük, ikinci en büyük ve üçüncü en büyük sayıyı bularak O(n) süreyi yakalayabiliriz.
  • Bunun için 3 değişken oluşturur ve bunları en küçük int olan float('-inf') eşitleriz.
  • Daha sonra liste içinde dolaşarak uygun sayıları yerleştirmeye başlarız.
  • Burada dikkat etmemiz gereken en büyük sayıdan büyük bir sayı bulursak gerekli kaydırmaları yapmamız gerekir.
class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        first = second = third = float('-inf')
        for i in nums:
            if first == i or second ==i or third ==i:
                continue
            
            if (i > first):
                third = second
                second = first
                first = i
            elif ( i > second):
                third = second
                second=i
            elif ( i >third):
                third = i
        return third if third > -float("inf") else first