leedcode-第三大的数

自己写的,用时很长

复制代码
from typing import List

class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        # 计算输入列表的长度
        n = len(nums)
        # 对列表进行冒泡排序,将较大的元素排在前面
        for i in range(n-1):
            for j in range(n-1-i):
                if nums[j] < nums[j+1]:
                    nums[j], nums[j+1] = nums[j+1], nums[j]
        
        # 创建一个空列表用于存放排序后的唯一元素
        new_nums = []
        # 遍历排序后的列表
        for i in nums:
            # 如果元素不在新列表中,则添加到新列表中
            if i not in new_nums:
                new_nums.append(i)
        
        # 获取新列表的长度
        new_len = len(new_nums)
        # 如果新列表长度小于3,则返回列表中的第一个元素
        if new_len < 3:
            return new_nums[0]
        # 否则返回新列表中的第三个元素
        else:
            return new_nums[2]
复制代码

 改进了一下查找算法 还是用时很长:

复制代码
class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        # 计算输入列表的长度
        n = len(nums)
        # 对列表进行冒泡排序,将较大的元素排在前面
        for i in range(n - 1):
            for j in range(n - 1 - i):
                if nums[j] < nums[j + 1]:
                    nums[j], nums[j + 1] = nums[j + 1], nums[j]
        
        # 初始化指针和计数器
        ptr = 0
        count = 0
        
        # 遍历排序后的列表
        while ptr < n - 1:
            # 如果当前元素比下一个元素大,则计数器加一
            if nums[ptr] > nums[ptr + 1]:
                count += 1
            # 如果计数器等于2,则当前元素是第三大的唯一整数,返回该元素
            if count == 2:
                return nums[ptr + 1]
            ptr += 1
        
        # 如果计数器没有达到2,说明列表中的元素不足3个,返回列表中的最大元素
        return nums[0]
复制代码

 gpt优化过的,不需要排序,遍历一遍nums就行:

复制代码
class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        # 使用 set 去除重复元素,得到唯一的元素列表
        unique_nums = list(set(nums))
        
        # 如果唯一元素数量小于3,直接返回最大值
        if len(unique_nums) < 3:
            return max(unique_nums)
        
        # 初始化第一、第二、第三大的数为负无穷
        first_max = second_max = third_max = float('-inf')
        
        # 遍历数组,更新第一、第二、第三大的数
        for num in unique_nums:
            if num > first_max:
                third_max = second_max
                second_max = first_max
                first_max = num
            elif num > second_max:
                third_max = second_max
                second_max = num
            elif num > third_max:
                third_max = num
        
        return third_max
复制代码

 

posted @   Junior_bond  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示