169. Majority Element

김현민·2021년 12월 27일
0

Algorithm

목록 보기
124/126
post-thumbnail

코드

/**
 * @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])
// );
  1. 우선 오름차순으로 정렬한다.
  2. 포인터가 하나씩 이동하며 현재 숫자와 cnt 를 통해 나온 숫자들을 비교한다.
  3. prevnow 값이 같으면 cnt++ ,
    다르면 cnt = 1 로 초기화한다.

😮‍💨 하지만 얼마나 자주 나왔는지에 대한 cnt값을 구할 수 있었지만 이에 해당되는 값을 구하진 못했다.


💡 솔루션을 참고하니 객체로 구현했다.
(짝을 짓는 형태)

nums.length / 2 부분에서도 헷갈렸던 것 같다.
최대 빈도 수는 무조건 배열 길이의 반 이상이다.
7이면 빈도수는 무조건 3이상이고, 3이상인 value의 key값을 리턴한다.

profile
Jr. FE Dev

0개의 댓글