2022.05.18
参加了人生中第一场面试的笔试,但是自己之前由于时间原因,并没有用JavaScript刷过算法,一些题目虽然有思路,但是C++的写法和JavaScript的不一样,我还是弄不出来。
放了暑假,我一定好好刷算法😭
该题的思路:
好像用map存储每个数字的个数行不通,我最开始的思路是用一个新数组存储,temp[index]++,但是行不通。最后看了答案,用一个对象存储,这个对象的属性是每个数字,属性值是这个数字的个数。
function foo(array) {
let arr = [];//存放最多次数的值
let temp = {};//保存每个数的个数
let res = 0;//记录出现最多次数的个数
array.forEach(item => {
if(temp[item] === undefined) { //如果这个数之前没出现过
temp[item] = 1;//将它的次数赋为1
} else {
temp[item]++;//次数++
}
});
for(let i in temp) {//遍历下标
if(temp[i] > res){//如果这个数的次数比之前出现过的最多次数还多
arr.length = 0;//清空数组
arr.push(Number(i));//将这个数加入最终答案,因为属性名是字符串,将它转换为数字
res = temp[i];//更新最大次数
}else if(temp[i] === res){//出现次数相同的数字
arr.push(Number(i));//将答案加入数组
res = temp[i];//更新最大次数
}
}
return arr;
}
console.log(foo([1,1,2,5,5,4,6,9]));//[ 1, 5 ]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)