414. Third Maximum Number

1. Question

414. Third Maximum Number

url :https://leetcode.com/problems/third-maximum-number/

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).

Example 1:

Input: [3, 2, 1]

Output: 1

Explanation: The third maximum is 1.

Example 2:

Input: [1, 2]

Output: 2

Explanation: The third maximum does not exist, so the maximum (2) is returned instead.

Example 3:

Input: [2, 2, 3, 1]

Output: 1

Explanation: Note that the third maximum here means the third maximum distinct number.
Both numbers with value 2 are both considered as second maximum.

2. Solution

class Solution(object):

    def findMax(self, nums):
        max = nums[0]
        for item in nums:
            if item > max:
                max = item
        return max

    def findMaxNotIn(self, nums, notInclude):
        size = len(nums)
        begin = size
        max = None
        for i in range(0, size):
            if nums[i] not in notInclude:
                if max is None:
                    max = nums[i]
                    begin = i + 1
                    break

        for i in range(begin, size):
            if nums[i] > max and nums[i] not in notInclude:
                max = nums[i]

        return max

    def thirdMax(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max = self.findMax(nums)
        secondMax = self.findMaxNotIn(nums, [max])
        if secondMax is None:
            return max
        thMax = self.findMaxNotIn(nums, [max, secondMax])
        if thMax is None:
            return max
        else:
            return thMax
原文地址:https://www.cnblogs.com/ordili/p/9986079.html