MajorityElement
Problem
https://leetcode.com/problems/majority-element/
Given an array nums of size n, return the majority element.
The majority element is the element that appears more than ⌊n / 2⌋
times. You may assume that the majority element always exists in the
array.
Example 1:
Input: nums = [3,2,3]
Output: 3
Example 2:
Input: nums = [2,2,1,1,1,2,2]
Output: 2
Constraints:
n == nums.length1 <= n <= 5 * 10:sup:`4`-10:sup:`9`<= nums[i] <= 10:sup:`9`The input is generated such that a majority element will exist in the array.
Follow-up: Could you solve the problem in linear time and in
O(1) space?
Solution
Use a dictionary to count the occurrences of each element in nums. We can
break early once the count of an element exceeds \(\\lfloor n/2 \\rfloor\).
Pattern
Array, Hash Table, Divide and Conquer, Sorting, Counting
Code
from typing import List
def majorityElement(nums: List[int]) -> int:
"""Returns the element that appears more than :math:`\\lfloor n/2 \\rfloor`
times in the list.
"""
counts = {}
for n in nums:
if n in counts:
counts[n] += 1
else:
counts[n] = 1
if counts[n] > len(nums) // 2:
return n
Test
>>> from MajorityElement import majorityElement
>>> majorityElement([3, 2, 3])
3
>>> majorityElement([2, 2, 1, 1, 1, 2, 2])
2
>>> majorityElement([1])
1
- MajorityElement.majorityElement(nums: List[int]) int
Returns the element that appears more than \(\lfloor n/2 \rfloor\) times in the list.