作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近在一次采访中提到了这个。给定一个整数列表,找到列表中最常出现的整数并返回一个数组。我能够回答,但其中一个测试用例让我失望了。
我不知道应该使用哪种排序方法来对数组进行排序以获得最常见的整数,并返回数组中包含最常见整数的所有项。
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/
我是一名优秀的程序员,十分优秀!