Skip to content

229. Majority Element II

Difficulty Topics

Description

Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times.

 

Example 1:

Input: nums = [3,2,3]
Output: [3]

Example 2:

Input: nums = [1]
Output: [1]

Example 3:

Input: nums = [1,2]
Output: [1,2]

 

Constraints:

  • 1 <= nums.length <= 5 * 104
  • -109 <= nums[i] <= 109

 

Follow up: Could you solve the problem in linear time and in O(1) space?

Solution

majority-element-ii.py
class Solution:
    def majorityElement(self, nums: List[int]) -> List[int]:
        if not nums: return []

        maj1, maj2, count1, count2 = 0, -1, 0, 0

        for num in nums:
            if num == maj1:
                count1 += 1

            elif num == maj2:
                count2 += 1

            elif count1 == 0:
                maj1, count1 = num, 1

            elif count2 == 0:
                maj2, count2 = num, 1

            else:
                count1 -= 1
                count2 -= 1

        return [n for n in (maj1, maj2) if nums.count(n) > len(nums) // 3]