This solution is failing for the edge case that I've created - [3, 2, 3, 1, 1, 1] For this, provided solution returns undefined. Need slight improvement in condition to fix this. Below one is working fine. let majorityElement = function (nums) { const ht = {}; for (const num of nums) { ht[num] = ht[num] + 1 || 1; } const isNumsOfEvenLength = nums.length % 2 === 0; const median = Math.floor(nums.length / 2); for (const key in ht) { if (isNumsOfEvenLength && ht[key] >= median) { return key; } else if (!isNumsOfEvenLength && ht[key] > median) { return key; } } };
Or you can simply use the below solution let majorityElement = function (nums) { const ht = {}; for (const num of nums) { ht[num] = ht[num] + 1 || 1; } const median = Math.ceil(nums.length / 2); for (const key in ht) { if (ht[key] >= median) { return key; } } }; console.log(majorityElement([3, 2, 3])); // 3 console.log(majorityElement([3, 2, 3, 1, 1, 1])); // 1