【Python3】【力扣题】414. 第三大的数

时间:2024-11-12 08:18:09

【力扣题】题目描述:

【Python3】代码:

1、解题思路:使用集合去重,再转为列表。列表从大到小排列。

若列表长度超过3则有第三大值,返回下标为2的第三大值,若列表长度小于3则没有第三大值,返回下标为0的最大值。

知识点:set(...):转为集合。集合:无序、元素唯一、可变的序列。

              list(...):转为列表。列表:有序、元素可重复、可变的序列。

             列表.sort(reverse=True):列表降序排列(从大到小)。

class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        # 使用集合去重,再转为列表
        s = list(set(nums))
        # 新列表降序排列
        s.sort(reverse=True)
        # 若新列表长度超过3,则返回第3大元素(从0开始,下标为2)
        if len(s) >= 3: return s[2]
        # 否则,返回最大元素(下标为0)
        else: return s[0]

2、解题思路:一个变量d用于统计不同元素个数。列表从大到小排列。

遍历列表,依次将当前元素与前一个元素比较,若两元素不同,d+1,若d等于3,则为第三大值返回当前元素。

遍历完列表,没有第三大值,则返回下标为0的最大值。

class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        nums.sort(reverse=True)      # 列表降序排列
        n = len(nums)                # 列表长度    
        d = 1                        # 统计不同元素的个数
        # 遍历列表,依次比较2个元素,若不同,d+1,若d为3,返回该元素
        for i in range(1, n):
            if nums[i] != nums[i-1]:
                d += 1
                if d == 3:
                    return nums[i]
        # 没有第三大元素,返回最大元素
        return nums[0]

3、解题思路:三个变量依次为最大值、次大值、第三大值,初始均为无穷小。

遍历列表,判断当前元素:

  • 若当前元素大于最大值,则当前元素为最大值,原最大值为次大值,原次大值为第三大值,
  • 若当前元素小于最大值大于次大值,则当前元素为次大值,原次大值为第三大值,
  • 若当前元素小于次大值大于第三大值,则当前元素为第三大值。

遍历完列表,若第三大值与初始值相同还是无穷小,则没有第三大值,返回最大值,否则返回第三大值。

知识点:float('-inf'):无穷小。

class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        # a,b,c 分别为最大值、次大值、第三大值,初始为无穷小
        a, b, c = float('-inf'), float('-inf'), float('-inf')
        # 遍历列表每个元素
        for i in nums: 
            if i > a:          # 当前元素比最大值还大
                a, b, c = i, a, b
            elif a > i > b:    # 当前元素比次大值大,次大值和第三大值都替换新值
                b, c = i, b
            elif b > i > c:    # 当前元素比第三大值大,替换第三大值
                c = i
        # 若第三大值为初始值则没有第三大值,返回最大值,否则返回第三大值
        return a if c == float('-inf') else c