[leetcode 10-06] 一、第三大的数(三种解法)

在这里插入图片描述

第一种解法
哈希表,排除重复数的影响

        hashMap ={
    
    }
        for ix in nums:
            if ix not in hashMap:
                hashMap[ix] = 1
            else:
                hashMap[ix] += 1
        nums_ls = list(hashMap.keys())
        nums_ls.sort()
        if len(nums_ls) < 3:
            return nums_ls[-1]
        else:
            return nums_ls[-3]

第二种解法
先排序,遇见重复的跳过

		nums_sort = sorted(nums, reverse = True)
        #print(nums_sort)
        diff = 1
        for i in range(1,len(nums_sort)):
            if nums_sort[i] != nums_sort[i-1]:
                diff += 1
                if diff == 3:
                    return nums_sort[i]
        return nums_sort[0]

第三种解法:o(n)
利用三个指针不断更新3个最大的三个数
遇见不足3个,也就是c未被替换,返回最大的a
只执行了一次循环

		a, b, c = float('-inf'), float('-inf'), float('-inf')
        for num in nums:
            if num > a:
                a, b, c = num, a, b
            elif a > num > b:
                b, c = num, b
            elif b > num > c:
                c = num
        return a if c == float('-inf') else c

猜你喜欢

转载自blog.csdn.net/weixin_45492560/article/details/120624339