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; } ...