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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)