题解 | #小米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
};
全部评论

相关推荐

01-19 12:48
门头沟学院 C++
只想搞钱的鸽子很喜欢...:混账是很多的,还有那些在自己风华正茂的年纪说风凉话讥讽那些下岗前员工的。这些人都是现在职场环境这么烂的帮凶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务