Task
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
This problem was taken from Leetcode
Solution
The solution:
Create an object (or associative array, depends of the language), iterate through all elements in the array adding them to the newly created object using the element value as a key. If element exists increase the value +1.
Keep track of mostly repeated element and return it at the end.
var arr = [3, 3, 4, 2, 4, 2, 4, 4];
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
var elements = {};
var majorityElement = nums[0];
var majorityElementCount = 1;
for(var i in nums) {
var element = nums[i];
elements[element] = typeof elements[element] == 'undefined' ? 1 : elements[element] + 1;
if(elements[element] > majorityElementCount) {
majorityElement = element;
majorityElementCount = elements[element];
}
}
return majorityElement;
};
console.log(">>", majorityElement(arr));
– Create an object (line 9)
– Iterate through each element in the array feeling up the object with the elements from the array where the element value would be the key of the element (line 14)
– Each time when the element exists, add + 1
– Keep track of mostly repeated element (Lines 16-17)
Could we optimize the code? Slightly. When we add + 1 we could check if the value is already greater than the length of the array / 2 and if se we know that this is the majority element because no other element could have greater value.
...
if(elements[element] > nums.length / 2) {
return element;
}
...