当前位置: 首页 > news >正文

网站建设报价清单内容石家庄自动seo

网站建设报价清单内容,石家庄自动seo,买服务器网站,福州网站建设兼职2316. 统计无向图中无法互相到达点对数 难度: 中等 来源: 每日一题 2023.10.21 给你一个整数 n ,表示一张 无向图 中有 n 个节点,编号为 0 到 n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间…


2316. 统计无向图中无法互相到达点对数
难度: 中等
来源: 每日一题 2023.10.21

给你一个整数 n ,表示一张 无向图 中有 n 个节点,编号为 0n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 aibi 之间有一条 无向 边。

请你返回 无法互相到达 的不同 点对数目

示例 1:

输入:n = 3, edges = [[0,1],[0,2],[1,2]]
输出:0
解释:所有点都能互相到达,意味着没有点对无法互相到达,所以我们返回 0 。

示例 2:

输入:n = 7, edges = [[0,2],[0,5],[2,4],[1,6],[5,4]]
输出:14
解释:总共有 14 个点对互相无法到达:
[[0,1],[0,3],[0,6],[1,2],[1,3],[1,4],[1,5],[2,3],[2,6],[3,4],[3,5],[3,6],[4,6],[5,6]]
所以我们返回 14 。

提示:

  • 1 <= n <= 10^5
  • 0 <= edges.length <= 2 * 10^5
  • edges[i].length == 2
  • 0 <= ai, bi < n
  • ai != bi
  • 不会有重复边。
class StockSpanner {public long countPairs(int n, int[][] edges) {}
}

分析与题解

  • 邻接表 + 深度优先遍历

    这个题目其实就是对无向图的邻接表的理解, 那么求两个点没有任何关联, 我们只要如果只要求出一条完整的边, 那么剩下所有的节点一定与这条完整的边不连接, 不连接的含义就是这条边上的节点与剩下的所有节点都是两两无法相互到达.

    那么基于这样的理论, 我们假设这条边上的节点个数是 m 个, 那么对于这条边上的所有节点与剩下的节点两两无法相互到达的组合个数为 m * (n - m) .

    另外, 假设 节点1节点2 无法相互到达, 那么深度优先遍历 节点1 时,会计算一遍 节点1节点2; 深度优先遍历 节点1 时, 同样会计算一遍 节点1节点2. 所以最终结果我们需要除以2.

    接下来, 我们看一下具体的解题过程.

    首先, 我们先创建无向图的邻接表, 这里我使用的是HashMap来作为邻接表的存储空间.

    // 创建邻接表
    HashMap<Integer, ArrayList<Integer>> cache = new HashMap<>();
    for(int i = 0; i < n; i++) {cache.put(i, new ArrayList<>());
    }
    for(int[] item: edges) {Integer first = item[0];Integer second = item[1];cache.get(first).add(second);cache.get(second).add(first);
    }
    

    然后通过深度优先遍历查找每一条边符合题目的个数.

    // 深度优先遍历
    // 当我们找到一个完整链路节点, 那么这些节点就不可能和剩下的节点有链接了
    // 假设找到某条无线边的所有节点为m个, 总结点数为n个. 那么相互不能到达的两两节点数为 m * (n - m)
    boolean[] visited = new boolean[n];
    long result  = 0;
    for(Integer key : cache.keySet()) {if(!visited[key]) {long count = dfs(key, cache, visited);result += (n - count) * count;}
    }
    

    对于深度优先遍历, 我们就没有啥好说的, 我们只需要按照常规方式进行递归即可.

    public int dfs(Integer key,  HashMap<Integer, ArrayList<Integer>> cache, boolean[] visited) {if(visited[key]) {return 0;}visited[key] = true;int count = 1;ArrayList<Integer> group = cache.get(key);for(Integer item : group) {if(visited[item] == false) {count += dfs(item, cache, visited);}}return count;
    }
    

    然后最后的计算结果因为所有的个数都计算了两遍, 我们需要除以2来求出最终的结果.

    return result/2;
    

    最后, 我们一起看一下整体的代码逻辑.

    class Solution {public long countPairs(int n, int[][] edges) {// 创建邻接表HashMap<Integer, ArrayList<Integer>> cache = new HashMap<>();for(int i = 0; i < n; i++) {cache.put(i, new ArrayList<>());}for(int[] item: edges) {Integer first = item[0];Integer second = item[1];cache.get(first).add(second);cache.get(second).add(first);}// 深度优先遍历// 当我们找到一个完整链路节点, 那么这些节点就不可能和剩下的节点有链接了// 假设找到某条无线边的所有节点为m个, 总结点数为n个. 那么相互不能到达的两两节点数为 m * (n - m)boolean[] visited = new boolean[n];long result  = 0;for(Integer key : cache.keySet()) {if(!visited[key]) {long count = dfs(key, cache, visited);result += (n - count) * count;}}return result/2;}public int dfs(Integer key,  HashMap<Integer, ArrayList<Integer>> cache, boolean[] visited) {if(visited[key]) {return 0;}visited[key] = true;int count = 1;ArrayList<Integer> group = cache.get(key);for(Integer item : group) {if(visited[item] == false) {count += dfs(item, cache, visited);}}return count;}
    }
    

    复杂度分析:

    • 时间复杂度: O(m + n), n 是总结点的个数, m是边数
    • 空间复杂度: O(m + n)

    结果如下所示.

http://www.ds6.com.cn/news/89005.html

相关文章:

  • b2c网站开发核心技术移动端seo关键词优化
  • 政府网站前台模板手机制作网站的软件
  • 58网站怎么做才有客户问常见的搜索引擎
  • 医疗网站 seo怎么做seo关键词的选择步骤
  • 网站建设飠金手指科杰十五网站推广方案策划书2000
  • 江苏网站建设价格低地推公司
  • 自己做的网站怎么上传到网络成功的网络营销案例ppt
  • 政府采购网供应商注册网站seo优化检测
  • 目前做的最好的招聘网站seminar是什么意思
  • flash网站的制作seochinaz查询
  • 做彩票网站会被判死刑百度公司有哪些部门
  • app开发公司哪里做seo网络优化是什么意思
  • 二手车网站怎么做长春seo排名外包
  • 辽宁城乡建设网站seo实战技巧100例
  • 三级分销网站开发近期发生的重大新闻
  • 3建网站常用的seo查询工具有哪些
  • 网站配色绿色网络宣传的方法渠道
  • 园艺wordpress模板福州百度推广优化排名
  • 丰镇市网站丰镇高铁在哪个位置建设网络推广文案怎么写
  • 灯饰网站开发web前端培训费用大概多少
  • 必应网站提交入口营销培训课程ppt
  • 网页设计制作学校网页阿里巴巴关键词排名优化
  • 火车头wordpress4.7全面的seo网站优化排名
  • 做网站都有什么项目16种营销模型
  • wordpress jpseo公司推广
  • 国外服务器厂商长沙网站seo报价
  • html网站标题怎么做的百度竞价包年推广是怎么回事
  • 企业网站源码vue网络推广赚钱
  • 深圳网站建设工作利用搜索引擎营销成功的案例
  • frp做网站seo代做