开启我的LeetCode刷题日记:1791. 找出星型图的中心节点

177 阅读2分钟

「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战

编程世界总是离不了算法

最近在看框架源码时,会有很多算法的实现逻辑,有时候会感到吃力

于是决定蹭着假期,加强算法和数据结构相关的知识

那怎么提升呢?

其实我知道算法这东西没有捷径,多写多练才能提升,于是我开启我的LeetCode刷题之旅

第一阶段目标是:200道,每天12

为了不乱,本系列文章目录分为三部分:

  1. 今日题目:xxx
  2. 我的思路
  3. 代码实现

今天题目:1791. 找出星型图的中心节点

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

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

  示例 1:

输入:edges = [[1,2],[2,3],[4,2]] 输出:2 解释:如上图所示,节点 2 与其他每个节点都相连,所以节点 2 是中心节点。 示例 2:

输入:edges = [[1,2],[5,1],[1,3],[1,4]] 输出:1  

提示:

3 <= n <= 105 edges.length == n - 1 edges[i].length == 2 1 <= ui, vi <= n ui != vi 题目数据给出的 edges 表示一个有效的星型图

我的思路

根据题意,n 个几点,组成 n-1 条边。因此,没有孤立的节点 所以,我们只需要判断前 2 个边的交点即可

证明: 假设前两个节点的交点不是中心节点。 将中心节点连接所有所有节点,组成的边数为 n-1; 根据假设条件,至少有一条边不在中心节点边中,因此该星形图的中边数 s >= n; 又 edges.length == n-1; 因此假设不成立

代码实现

/**
 * @param {number[][]} edges
 * @return {number}
 */
var findCenter = function(edges) {
    // 根据题意,n 个几点,组成 n-1 条边。因此,没有孤立的节点
    // 所以,我们只需要判断前 2 个边的交点即可
    let first = edges[0], second = edges[1];
    if(first[0] == second[0] || first[0] == second[1]) {
        return first[0]
    } else {
        return first[1]
    }
};



总结

实现方式其实有很多,这里仅供参考~

由于刚开始刷题,也不知道从哪里刷好,如果前辈们有好的建议,希望不吝赐教,感谢🌹