414.|414. Third Maximum Number

414.|414. Third Maximum Number
文章图片

题目:给定一个非空的整数数组,返回这个数组当中第三大的数字,如果不存在,则返回最大的数字,时间复杂度为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]

【414.|414. Third Maximum Number】解法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]

    推荐阅读