k個の繰り返しの最も多い数字を探します


質問する


nums = [1,1,,12,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]

卑怯なコード...

function topK(nums, k) {
  // 여기에 코드를 작성해주세요.
  let nums2 = new Set(nums);
  let arr = [];

  for (let i = 0; i < nums.length; i++) {
    let t = nums.filter(ele => {
      return nums[i] === ele;
    });
    arr.push(t.length);
  }
  let arr2 = new Set(arr);

  const a = Array.from(nums2); //투입 배열
  const b = Array.from(arr2); //중복수 많은거
  const copyB = [...b]; // 배열의 카피본
  let answer = [];
  let count = 0;

  while (count < k) {   // 최대 값을 찾아 카피b에서 자르고
    					// b의 index 값을 answer에 push 
    					// k번 반복!
   
    let max = Math.max(...copyB);

    let idx = b.indexOf(max);

    answer.push(a[idx]);
    let z = copyB.splice(b.indexOf(max), 1);

    count++;
  }

  return answer;
}

真似したいチームメンバーのコード


function topK(nums, k) {
  let obj = {}
  for (let i = 0 ; i < nums.length ; i++){
    if(nums[i] in obj){
      obj[nums[i]] += 1 ;
    } else {
      obj[nums[i]] = 1 ;
    }
  }
  let answer = Object.keys(obj).sort(
    function(a,b){return obj[b] - obj[a]}
  )
  let result = answer.slice(0,k)
  return result.map(x => Number(x))
}
topK([5,5,5,3,3,3,3,3,2,2],2)

  • 缲り返し复制~カット~そして完成したコードはチームメンバーの様子で、半分のコードがあって、ハハハハ

  • 問題を解くときは、より多くのオブジェクトを適用してみるべきです.🧐