找出星型图的中心节点 (简单题)

题目描述:

有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。

给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 ui 和 vi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。

例题描述:

解题分析:

方法一:将二维数组转换为一维数组,之后进行对比即可

        var findCenter = function(edges) {
            var numArr=[]=edges.reduce(function(a,b){
                return a.concat(b)
            })
            for(var i=2;i<5;i++){
                if(numArr[0] ===numArr[i])
                    return numArr[0]
                if(numArr[1] ==numArr[i])
                    return numArr[1]
            }
        };

 这个方法在力扣上是运行超过时间了,但是这个方法其实是可以使用的,超时的原因很简单,当使用reduce之后,如果这个二维数组的值有很多,那么就会浪费很多的时间

第二种方法:

var findCenter = function(edges) {
    for(var i=0;i<edges.length;i++){
        for(var j=0;j<2;j++){
            if(edges[i][0]  ==edges[i+1][j])    
                return edges[i][0]
            else if(edges[i][1]  ==edges[i+1][j])    
                return edges[i][1]
        }
    }
};

使用双重数组进行循环即可

其实这个方法可以进行一个优化,不必使用双重的循环,只使用一重循环即可

var findCenter = function(edges) {
    for(var j=0;j<4;j++){
        if(edges[0][0]  ==edges[1][j])    
            return edges[0][0]
        else if(edges[0][1]  ==edges[1][j])    
            return edges[0][1]
    }
};

这个方法提高了时间和空间复杂度

最后的这个方法是最简单的,也是最节省时间的

var findCenter = function(edges) {
    return edges[0][0] == edges[1][0] || edges[0][0] == edges[1][1] ? edges[0][0] : edges[0][1]
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值