LeetCode1791

题目描述:

在这里插入图片描述

个人理解:

这个题不要想太多了,直接判断二维数组的前两个一维数组的值即可。也就是,第一个一维数组的第一个元素如果和第二个一维数组中的元素存在相同的值,则返回该元素,没有则返回第一个一维数组的第二个元素

复杂思路:n个点,n-1个边,对于中心点来说和它相连的必有n-1条边。所以除了中间节点的度是n-1,其余点的度为1。

代码:

/**
 * ClassName:TestDemo
 * Package:Work1791
 * Description:
 *有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。
 *
 * 给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 ui 和 vi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。
 * @date:2022/2/18 20:26
 * @author:HDLaZy
 */
public class TestDemo {
    public static void main(String[] args) {
        int []a[] =new int[][]{{1,2},{2,3},{4,2}};
        //int a[][]=new int[][]{{1,2},{5,1},{1,3},{1,4}};

        Solution solution=new Solution();
        int center = solution.findCenter(a);
        System.out.println(center);
    }
}

class Solution{
    
/*    public int findCenter(int[][] edges) {

        //如果第二个数组和第一个数组第一个值存在相同的则返回此数,如果没有则返回第一个数组的第二个数
        return   edges[0][0]==edges[1][0] || edges[0][0]==edges[1][1] ? edges[0][0] : edges[0][1];
    }*/

    public int findCenter(int[][] edges) {
        int [] degrees =new int[edges.length+1];
        for(int[] edge:edges){//遍历所有的一维数组
            degrees[edge[0]-1]++;
            degrees[edge[1]-1]++;
        }

        for(int i=0;;i++){//返回的是下标+1,而不是degrees存的值
            if(degrees[i]==edges.length){
                return i+1;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值