/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function (nums) {
const ht = {};
for (const num of nums) {
ht[num] = ht[num] + 1 || 1;
}
for (const key in ht) {
if (ht[key] > Math.floor(nums.length / 2)) {
return key;
}
}
};
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function (nums) {
console.log("nums: ", nums);
nums.sort((a, b) => {
return a - b;
});
let target = 0;
let answer;
let cnt = 1;
let max = 0;
let now;
let prev;
let curNum;
while (nums[target]) {
now = nums[target];
prev = nums[target - 1];
if (now !== prev) {
curNum = now;
max = cnt;
cnt = 1;
} else {
cnt++;
curNum = prev;
}
target++;
}
return curNum;
};
// majorityElement([3, 2, 3]);
majorityElement([3, 3, 4]);
// majorityElement([2, 2, 1, 1, 1, 2, 2]);
// majorityElement([-1, 100, 2, 100, 100, 4, 100]);
// console.log(
// "majorityElement([-1, 100, 2, 100, 100, 4, 100]);: ",
// majorityElement([-1, 100, 2, 100, 100, 4, 100])
// );
cnt
를 통해 나온 숫자들을 비교한다.prev
와 now
값이 같으면 cnt++
,cnt = 1
로 초기화한다.😮💨 하지만 얼마나 자주 나왔는지에 대한 cnt값을 구할 수 있었지만 이에 해당되는 값을 구하진 못했다.
💡 솔루션을 참고하니 객체로 구현했다.
(짝을 짓는 형태)
nums.length / 2
부분에서도 헷갈렸던 것 같다.
최대 빈도 수는 무조건 배열 길이의 반 이상이다.
7이면 빈도수는 무조건 3이상이고, 3이상인 value의 key값을 리턴한다.