majority-element
Problem
Problem Description
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
You may assume that the array is non-empty and the majority element always exist in the array.
Example 1:
Input: [3,2,3]
Output: 3
Example 2:
Input: [2,2,1,1,1,2,2]
Output: 2
Solution
Solution 1 -- HashMap
Using HashMap to store each element with its frequency as pair.
iterate through array nums, add each number and its frequency into map
after add into map, check whether current element frequency already greater than [n/2],
if already, then terminate return current element.
if not, continue.
since it is already assumed that array is non-empty, and always has majority element exist, so during iterate, majority element must find.
Complexity Analysis
Time Complexity: O(N)
Space Complexity: O(N)
N - length of array nums
Code
class Solution {
public int majorityElement(int[] nums) {
int len = nums.length;
Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
// check current element frequency
if (map.get(num) > len / 2) return num;
}
// should not be reached
return 0;
}
}
Solution 2 -- Boyer-Moor voting algorithm
Assume that we maintain a candidate and count, iterate through array nums:
We check count, if we found count == 0, reset candidate = num (current element)
at the same time, we check current element num == candidate,
if num == candidate, then count + 1;
if num != candidate, then count - 1
at last, remain candidate is majority element.
Complexity Analysis
Time Complexity: O(N)
Space Complexity: O(1)
N - the length of array nums
Code -- Boyer-Moor voting algorithm
class Solution {
public int majorityElement(int[] nums) {
int count = 0;
int candidate = nums[0];
for (int num : nums) {
// check current count, if count = 0, reset candidate to current element
if (count == 0) candidate = num;
// calculate count
count += candidate == num ? 1 : (-1);
}
// last candidate is majority element
return candidate;
}
}
Last updated
Was this helpful?