题解 | #小米Git#

小米Git

https://www.nowcoder.com/practice/4fcd94851d9142458329fd1d3e5802a8

function Git( matrix ,  versionA ,  versionB ) {
    const n = matrix.length
//     将string转换为数组更改数组。。。。
    for(let i = 0; i < n; i++) {
        matrix[i] = matrix[i].split('').map(Number)
    }
//     father数组记录当前节点的父元素
    const father = new Array(n).fill(0)
//     level数组记录当前节点的层级,0为0层
    const level = new Array(n).fill(0)

    const q = new Array()
//     BFS遍历每个元素
    q.push(0)
    while (q.length > 0) {
        // 遍历行数
        let index = q.shift()
        for (let i = 1; i < n; i++) {
            if (matrix[index][i] === 1) {
                father[i] = index
                matrix[i][index] = 0
                level[i] = level[index] + 1
                q.push(i)
            }
        }
    }

    while (level[versionA] > level[versionB]) {
        versionA = father[versionA]
    }
    while (level[versionA] < level[versionB]) {
        versionB = father[versionB]
    }
//     如果两个节点位于同一侧
    if (versionA === versionB)
        return versionA
//     如果两个节点位于不同侧
    while (father[versionA] !== father[versionB]) {
        versionA = father[versionA]
        versionB = father[versionB]
    }
    return father[versionA]
}
module.exports = {
    Git : Git
};
全部评论

相关推荐

无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务