首页 > 解决方案 > 给定一个整数列表,找出列表中出现频率最高的整数

问题描述

我最近在一次采访中提出了这个问题。给定一个整数列表,找到列表中出现频率最高的整数并返回一个数组。我能够回答,但其中一个测试用例让我失望了。

我被困在应该使用哪种排序方法来对数组进行排序以获得最常见的整数并返回数组中包含最常见整数的所有项目。

const arr = [1,1,2,3,3,3,3,4,5,5,10]; // return 3 

const mostCommon = (arr) => {
 if (arr.length < 1 ) {
     return null;
 }
    const map = {};
    let mostFrequentNum = arr[0];
    for (let i = 0; i < arr.length; i++) {
      let currentNum = arr[i];
        !map[currentNum] ? map[currentNum] = 1 : ++map[currentNum];
        // 1. Current has higher count than known max
        if(map[currentNum] > map[mostFrequentNum]) {
        mostFrequentNum = currentNum;
       }
    }
    return mostFrequentNum;
};
mostCommon(arr); // return 3

/* confused how to implement test case below */
// const arr = [5, 99, 3994813, 99, -32, 43, 99, 3994813, 3994813]; 
// return [ 99, 3994813 ]

标签: javascriptarrays

解决方案


我只有 1 个解决方案;)

const arr = [1,1,2,3,3,3,3,4,5,5,10];

var
  counting  = {},
  most_Freq = arr[0]
  ;

arr.forEach( x=>{ counting[x] = (counting[x] || 0)+1; });

most_Freq = Object.keys(counting).reduce((a, b) => counting[a] > counting[b] ? a : b);

console.log ( 'most frequent is ', most_Freq )


推荐阅读