Skip to main content

Majority Element II

Problem statement

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?

My solution

/**
* @param {number[]} nums
* @return {number[]}
*/
var majorityElement = function(nums) {
const maj = Math.floor(nums.length / 3);
const track = {};

for (const num of nums) {
if (!track[num]) {
track[num] = 1;
} else{
track[num]++
}
}
const value = Object.keys(track).filter(v => track[v] > maj);
// console.log(value, track, maj);
return value;
};