414. Third Maximum Number

414. Third Maximum Number_第1张图片

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

你可能感兴趣的:(414. Third Maximum Number)