题目:给定一个非空的整数数组,返回这个数组当中第三大的数字,如果不存在,则返回最大的数字,时间复杂度为O(n)。
解法1:先对这个数组进行排序,可以用python当中的sorted()函数对数组进行从小到大的排序,然后在循环中进行判断。用count来计数当前是第几大的数字。由于数组当中如果只有<=2个不同的数字,那么返回的则是最大的那个数字;而如果有>=3个不同的数字,则返回的是第三大的。从排序后数组的后往前进行判别,如果在i=1之前,就有三个不同的数字,则返回第三个数字;如果i=1的时候只有一个不同的数字,那么也是返回nums1[l-1];如果已经存在了两个不同的数字,那么就要判断i=0与i=1的时候是否相等,如果相等则说明整个数组只有两个不同的数字,那么返回最大的nums1[l-1],如果不等,则说明i=0是第三大的数字,那么返回nums1[0]。
class Solution(object):
def thirdMax(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
l=len(nums)
count=0
nums1=sorted(nums)
for i in range(l-1,-1,-1):
if i!=1:
if nums1[i-1]==nums1[i]:
continue
else:
count=count+1
if count==2:
return nums1[i-1]
break
else:
if nums1[i-1]==nums1[i]:
return nums1[l-1]
else:
count=count+1
if count==2:
return nums1[0]
else:
return nums1[l-1]
解法2:利用sorted()和set()函数,sorted()对数组进行排序,set()可以删除数组中重复的数据。
class Solution(object):
def thirdMax(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums1=sorted(set(nums))
l=len(nums1)
if l<=2:
return nums1[l-1]
else:
return nums1[l-3]