【力扣题】题目描述:
【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 += 1if 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, belif a > i > b: # 当前元素比次大值大,次大值和第三大值都替换新值b, c = i, belif b > i > c: # 当前元素比第三大值大,替换第三大值c = i# 若第三大值为初始值则没有第三大值,返回最大值,否则返回第三大值return a if c == float('-inf') else c