腾讯企业微信前端面试一面算法题

这篇博客分享了在腾讯企业微信前端面试中遇到的一道算法题,涉及如何找出一维数组中出现频次最高的JS对象以及实现JS对象等概率乱排的方法。作者首先提供了原始的解决方案,然后对代码进行了优化,通过统计对象出现次数实现众数查找,并利用洗牌算法确保元素乱序后概率相等。
摘要由CSDN通过智能技术生成

1、筛选出现频次最高的JS对象
一个一维数组内有多个对象,且对象可重复出现,要求写一个函数,返回出现频次最高的对象列表。
const obj1 = {};
const obj2 = {};
const arr = [obj1, obj2, obj1, obj1];
function find(arr) {
const result = [];
// …
return result;
}
console.log(find(arr));

看见这道题我的解题思路就是找到数组中的众数,所以我想到的就是统计数组中每个元素出现的次数并记录下来。

const obj1 = {
    a: 1 }
const obj2 = {
    a: 2 }
const obj3 = {
    a: 3 }
const arr = [obj1, obj1, obj1, obj3, obj2]
function find(arr) {
   
    let result = []
    const countArr = [] // 计数用数组
    const keyArr = [] // 去重后的数组,与上面的计数数组下标一一对应
    let max = 0 // 用来储存最大值
    
    // 这次循环将每个元素的出现次数统计出来了
    arr.forEach(item => {
   
        if (keyArr.includes(item)) {
   
            countArr[keyArr.indexOf(item)]++
        } else {
   
            countArr.push(1)
            keyArr.push(item)
        }
    })
    
    // 这次循环则是找到出现次数最多的元素,然后push进结果数组输出
    countArr.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值