gpt4 book ai didi

javascript - 给定一个整数列表,找到列表中最常出现的整数

转载 作者:行者123 更新时间:2023-11-30 06:16:54 24 4
gpt4 key购买 nike

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

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

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 ]

最佳答案

只需像您正在做的那样累加计数,然后完成后遍历并找到最大的计数。

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

const mostCommon = (arr) => {
const map = {};
for (currentNum of arr) {
!map[currentNum] ? map[currentNum] = 1 : ++map[currentNum];
}
let result = Object.keys(map).reduce((r, n) => {
if (map[n] > r.c) {
r.c = map[n];
r.n = n;
}
return r;
}, { c: -1 });
return result.n;
};
console.log(mostCommon(arr));

console.log(mostCommon([5, 99, 3994813, 99, -32, 43, 99, 3994813, 3994813]));

.reduce() 过程保留一个对象,该对象包含原始数组中数字及其计数的字段。

您的问题使用“整数”单数形式,但您的示例表明您希望列表 的值与最大计数相关联。为此,您需要修改上面的代码以使用列表而不是简单的标量来维护 .reduce() 累加器:

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

const mostCommon = (arr) => {
const map = {};
for (currentNum of arr) {
!map[currentNum] ? map[currentNum] = 1 : ++map[currentNum];
}
let result = Object.entries(map).reduce((r, [n, c]) => {
if (c > r.max) r.max = c;
r[c] ? r[c].push(n) : r[c] = [n];
return r;
}, { max: -1 });
return result[result.max];
};
console.log(mostCommon(arr));

console.log(mostCommon([5, 99, 3994813, 99, -32, 43, 99, 3994813, 3994813]));

关于javascript - 给定一个整数列表,找到列表中最常出现的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55602935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com