获取一个出现次数最多的路径

天天搞业务,真是发现一到面试算法环节就容易脑子先嗡嗡空白一下,然后再告诉自己冷静冷静,不慌,可以的可以的……

好了,进入正题,今儿小米一面一道题目如下。

比如有以下数组,同一个用户按照数组顺序,从u1->u2, u2->u3 等路径,统计出出现次数最多的路径。(只考虑一步即可,一开始没理解题目,还考虑了u1->u2->u3,费了不少时间)

const arr = [
    {user: 'A', url: 'u1'},
    {user: 'B', url: 'u1'},
    {user: 'C', url: 'u1'},
    {user: 'A', url: 'u2'},
    {user: 'B', url: 'u2'},
    {user: 'A', url: 'u3'},
    {user: 'C', url: 'u3'},
    {user: 'A', url: 'u4'},
]
// A: 'u1->u2' 'u2->u3' 'u3->u4'
// B: 'u1->u2'
// C: 'u1->u3'
// 统计出现次数最多的 eg:'u1->u2' 2次

面试的时候,我用了两次遍历,然后面试官说一次也可以。然后面试结束后花了半个小时实现了一下…

function findMaximum(arr) {
    const curUserUrl = {}
    const pathObj = {}
    let maxCount = 0
    let path = ''
    arr.forEach(e => {
        if (curUserUrl[e.user]) {
            let curPath = `${curUserUrl[e.user]}->${e.url}`
            if (pathObj[curPath]) {
                pathObj[curPath] += 1;
                if (pathObj[curPath] > maxCount) {
                    maxCount = pathObj[curPath]
                    path = curPath
                }
            } else {
                pathObj[curPath] = 1
            }
        } 
        curUserUrl[e.user] = e.url
    });

    return {
        path,
        maxCount
    }
}

啊~~自己都写了半个小时,真到面试时候,时间怎么够┐(T.T ) ( T.T) ノ

最近还是多练习练习,虽然讨厌面试算法,但是为了💰💰💰,冲吧~~~

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦