第一种解法
哈希表,排除重复数的影响
hashMap ={
}
for ix in nums:
if ix not in hashMap:
hashMap[ix] = 1
else:
hashMap[ix] += 1
nums_ls = list(hashMap.keys())
nums_ls.sort()
if len(nums_ls) < 3:
return nums_ls[-1]
else:
return nums_ls[-3]
第二种解法
先排序,遇见重复的跳过
nums_sort = sorted(nums, reverse = True)
#print(nums_sort)
diff = 1
for i in range(1,len(nums_sort)):
if nums_sort[i] != nums_sort[i-1]:
diff += 1
if diff == 3:
return nums_sort[i]
return nums_sort[0]
第三种解法:o(n)
利用三个指针不断更新3个最大的三个数
遇见不足3个,也就是c未被替换,返回最大的a
只执行了一次循环
a, b, c = float('-inf'), float('-inf'), float('-inf')
for num in nums:
if num > a:
a, b, c = num, a, b
elif a > num > b:
b, c = num, b
elif b > num > c:
c = num
return a if c == float('-inf') else c