当前位置: 首页 > article >正文

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

【力扣题】题目描述:

【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


http://www.kler.cn/a/390938.html

相关文章:

  • 【数据链电台】洛克希德·马丁(Lockheed Martin)
  • 初学者关于对机器学习的理解
  • 【简博士统计学习方法】第1章:2. 统计学习方法的基本分类
  • 【git】在服务器使用docker设置了一个gogs服务器,访问和现实都不理想
  • [笔记] 使用 Jenkins 实现 CI/CD :从 GitLab 拉取 Java 项目并部署至 Windows Server
  • Perturbed-Attention Guidance(PAG) 笔记
  • 代码随想录算法训练营第二十天|39. 组合总和、40.组合总和II、131.分割回文串
  • [MySQL]隐式类型转换
  • 为何数据库推荐将IPv4地址存储为32位整数而非字符串?
  • Spring学习笔记(四)
  • Java基于SpringBoot+Vue框架的宠物寄养系统(V2.0),附源码,文档
  • 微软的新模拟器将为 Windows on Arm 带来更多游戏
  • android dvr黑屏
  • Python从0到100(七十一):Python OpenCV-OpenCV进行红绿灯识别
  • 什么是结构体?什么是联合体?结构体和联合体有什么区别?能否在声明过程当中缺省名字?结构体可以包含函数吗?在 C 和 C++ 中有何不同?
  • 【板栗糖GIS】——如果安装的vscode版本落后了,如何无障碍更新
  • day57 图论章节刷题Part08(拓扑排序、dijkstra(朴素版))
  • C 语言标准库 - <errno.h>
  • 创新培养:汽车零部件图像分割
  • yum配置,文件,命令详解
  • 综合案例铁锅炖(CSS项目大杂烩)
  • opencv_相关的问题
  • 【哲学和历史】-2 :《看,这是哲学》《50堂经典哲学思维课》读书笔记
  • Linux权限和开发工具(3)
  • 手把手教你30秒下载Typora通用版(mac、win适用)
  • 前端知识点---Javascript中检测数据类型函数总结