LeetCode--414--第三大的数

问题描述:

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。

示例 1:

输入: [3, 2, 1]

输出: 1

解释: 第三大的数是 1.

示例 2:

输入: [1, 2]

输出: 2

解释: 第三大的数不存在, 所以返回最大的数 2 .

示例 3:

输入: [2, 2, 3, 1]

输出: 1

解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。

方法1:

 1 class Solution(object):
 2     def thirdMax(self, nums):
 3         """
 4         :type nums: List[int]
 5         :rtype: int
 6         """
 7         nums.sort()
 8         if len(set(nums)) < 3:
 9             return nums[-1]
10         nums = nums[::-1]
11         i,j,index = 0,1,0
12         while i < len(nums):
13             j = i + 1
14             while j < len(nums) and nums[i] == nums[j]:
15                 j += 1
16             index += 1 #当相邻两数不相等时+1,两次不相等即找到了第三大的数字
17             i = j
18             if index == 2:
19                 return nums[j]      

方法2:

 1 class Solution(object):
 2     def thirdMax(self, nums):
 3         """
 4         :type nums: List[int]
 5         :rtype: int
 6         """
 7         nums.sort()
 8         new_set = set(nums)
 9         if len(new_set) < 3:
10             return nums[-1]
11         nums = nums[::-1]
12         new_set.remove(max(new_set))
13         new_set.remove(max(new_set))
14         return max(new_set)    

方法3:

 1 class Solution(object):
 2     def thirdMax(self, nums):
 3         """
 4         :type nums: List[int]
 5         :rtype: int
 6         """
 7         nums = list(set(nums))
 8         nums.sort()
 9         if len(nums) <= 2:
10             return nums[-1]
11         else:
12             return nums[-3]

2018-10-01 08:42:29

原文地址:https://www.cnblogs.com/NPC-assange/p/9734034.html