思路描述:
- 由于nums中都是int,因此最小值应该是 -2147483648(long);
- 一个循环中依次选出第一大、第二大、第三大的数;
- 如果第三大不存在,返回第一大的数;
C++实现如下:
class Solution {
public:
int thirdMax(vector<int>& nums)
{
long temp = -2147483649;
long one = temp, two = temp, three = temp;
for(int i = 0; i < nums.size(); ++i)
{
if(nums[i] > one)
{
three = two;
two = one;
one = nums[i];
}
else if(nums[i] > two && nums[i] < one)
{
three = two;
two = nums[i];
}
else if(nums[i] > three && nums[i] < two)
{
three = nums[i];
}
}
if(three == temp)
return int(one);
else
return int(three);
}
};
python实现起来更加简单:
- 使用set去重;
- 转化成list降序排序
- 判断nums的长度,返回结果
class Solution:
def thirdMax(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums = list(set(nums))
nums = sorted(nums, reverse=True)
if len(nums) < 3:
return nums[0]
else:
return nums[2]