最近在跑面试,最近遇到过好几次同样的笔试题,其中一个就是这个:
[1,1,1,3,3,4,4,4,4],在这样一组数组中找到里面出现最多的元素以及出现的次数
一年前被面试到的时候是电话面试题,当时没有思想准备,想到的最直接的办法就是一个for循环把不同元素分不同数组存储,最后一个去比较他们的长度,这样的方法现在想来很蠢,也很费内存;
最近又在面试过程中遇到了同样的笔试题,还有一个是直接让我敲代码的,我目前想到的比较简单一点的方法如下,当然,如果有更好的方法可以交流,本人现在来说是技术菜鸟
const arr = [1,1,1,3,3,4,4,4,4]
let obj = {}
arr.forEach(el => {
obj[el] ? obj[el] += 1 : obj[el] = 1
})
let max = '' // 用于存储出现最多的元素
let maxNum = 0 // 用于存储出现最多元素的长度,也就是出现次数
Object.keys(obj).forEach(el => {
if (obj[el] > maxNum) {
max = el
maxNum = obj[el]
}
})
还有遇到数组里存在多个出现次数一样,且是最多的,在拿到最大数之后再遍历查找下,属性值跟这个最大值一样的就行
记录一下,如果对你有帮助,再好不过了