【发布时间】:2019-08-31 08:16:16
【问题描述】:
我最近在一次采访中提出了这个问题。给定一个整数列表,找出列表中出现频率最高的整数并返回一个数组。我能够回答,但其中一个测试用例让我失望了。
我不知道应该使用哪种排序方法对数组进行排序以获得最常见的整数并返回数组中包含最常见整数的所有项目。
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 ]
【问题讨论】:
-
你肯定不想从
if声明里面去return;您将跳过原始数组的一部分。 -
最简单的解决方案:对数组进行排序后,在第一次迭代中找到最频繁出现的数字的次数。然后在第二次迭代中返回所有出现多次的数字。
-
您的问题令人困惑:您使用“整数”一词,单数,但随后您还说您想要一个具有多个值的数组,以防出现平局。是哪个?
-
@Pointy 无用和愚蠢的面试问题措辞不佳的情况并不少见 :-)
-
@pointy 谢谢。我并不是要在 if 语句中返回。我纠正了它。我认为面试官的意思是询问第一个测试用例中最常见的整数以及包含第二个测试用例中最常见整数的数组中的所有 num 集,我也对它的措辞感到困惑。感谢您的帮助。
标签: javascript arrays