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

管理公司网站建设seo是哪个国家

管理公司网站建设,seo是哪个国家,虹口专业做网站,商城网站建设报价表文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 图 二【题目难度】 中等 三【题目编号】 802.找到最终的安全状态 四【题目描述】 有一个有…

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时空频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

二【题目难度】

  • 中等

三【题目编号】

  • 802.找到最终的安全状态

四【题目描述】

  • 有一个有 n 个节点的有向图,节点按 0n - 1 编号。图由一个 索引从 0 开始 的 2D 整数数组 graph表示, graph[i]是与节点 i 相邻的节点的整数数组,这意味着从节点 igraph[i]中的每个节点都有一条边。
  • 如果一个节点没有连出的有向边,则该节点是 终端节点 。如果从该节点开始的所有可能路径都通向 终端节点 ,则该节点为 安全节点
  • 返回一个由图中所有 安全节点 组成的数组作为答案。答案数组中的元素应当按 升序 排列。

五【题目示例】

  • 示例 1
    在这里插入图片描述

    • 输入:graph = [[1,2],[2,3],[5],[0],[5],[],[]]
    • 输出:[2,4,5,6]
    • 解释:示意图如上。
      • 节点 5 和节点 6 是终端节点,因为它们都没有出边。
      • 从节点 2、4、5 和 6 开始的所有路径都指向节点 5 或 6 。
  • 示例 2

    • 输入:graph = [[1,2,3,4],[1,2],[3,4],[0,4],[]]
    • 输出:[4]
    • 解释:
      • 只有节点 4 是终端节点,从节点 4 开始的所有路径都通向节点 4 。

六【题目提示】

  • n = = g r a p h . l e n g t h n == graph.length n==graph.length
  • 1 < = n < = 1 0 4 1 <= n <= 10^4 1<=n<=104
  • 0 < = g r a p h [ i ] . l e n g t h < = n 0 <= graph[i].length <= n 0<=graph[i].length<=n
  • 0 < = g r a p h [ i ] [ j ] < = n − 1 0 <= graph[i][j] <= n - 1 0<=graph[i][j]<=n1
  • g r a p h [ i ] graph[i] graph[i] 按严格递增顺序排列。
  • 图中可能包含自环。
  • 图中边的数目在范围 [ 1 , 4 ∗ 1 0 4 ] [1, 4 * 10^4] [1,4104] 内。

七【解题思路】

  • 利用拓扑排序的思想解决该问题
  • 我们首先构建一个反向图,即假如之前i -> j,那么反向图就变为j -> i,反向图的目的是用来后续计算出度来找到终端节点
  • 同时构建原图的出度数组,后续就会用该数组来找到安全节点
  • 然后将得到的所有终端节点都入队列,后续操作该队列即可得到所有终端节点
  • 然后将得到的安全节点(所有终端节点都是安全节点)保存到集合中
  • 然后通过逆向拓扑排序计算得到安全节点:
    • 首先从队列中取出一个安全节点
    • 然后查看它的邻接节点
      • 然后将邻接节点的出度减1
      • 如果此时出度为0,那么说明其为安全节点,将其入队列和集合中
  • 具体细节可以参考下面的代码
  • 最后返回结果即可

八【时空频度】

  • 时间复杂度: O ( m + n ) O(m + n) O(m+n) m m m为图的节点数, n n n为图的边数
  • 空间复杂度: O ( m + n ) O(m + n) O(m+n) m m m为图的节点数, n n n为图的边数

九【代码实现】

  1. Java语言版
class Solution {public List<Integer> eventualSafeNodes(int[][] graph) {// 图中节点的个数int n = graph.length;// 用来存储反向图List<List<Integer>> reverseGraph = new ArrayList<>();for (int i = 0; i < n; i++) {reverseGraph.add(new ArrayList<>());}// 每个节点的出度int[] outDegree = new int[n];// 构建反向图和出度数组for (int i = 0; i < n; i++) {outDegree[i] = graph[i].length;for (int neighbor : graph[i]) {reverseGraph.get(neighbor).add(i);}}// 初始化队列,将所有终端节点(出度为0的节点)加入队列Queue<Integer> queue = new LinkedList<>();for (int i = 0; i < n; i++) {if (outDegree[i] == 0) {queue.offer(i);}}// 用集合存储安全节点Set<Integer> safeNodes = new HashSet<>(queue);// 逆向拓扑排序while (!queue.isEmpty()) {int node = queue.poll();for (int neighbor : reverseGraph.get(node)) {outDegree[neighbor]--;if (outDegree[neighbor] == 0) {safeNodes.add(neighbor);queue.offer(neighbor);}}}// 返回安全节点的升序列表List<Integer> res = new ArrayList<>(safeNodes);Collections.sort(res);return res;}
}
  1. Python语言版
class Solution:def eventualSafeNodes(self, graph: List[List[int]]) -> List[int]:# 图中节点的个数n = len(graph)# 用来存储反向图reverse_graph = defaultdict(list)# 每个节点的出度out_degree = [0] * n# 构建反向图和出度数组for i, neighboors in enumerate(graph):out_degree[i] = len(neighboors)for neighboor in neighboors:reverse_graph[neighboor].append(i)# 初始化队列,将所有终端节点(出度为0的节点)加入队列queue = deque(i for i in range(n) if out_degree[i] == 0)# 用集合存储安全节点safe_nodes = set(queue)# 逆向拓扑排序while queue:node = queue.popleft()for neighboor in reverse_graph[node]:out_degree[neighboor] -= 1if out_degree[neighboor] == 0:safe_nodes.add(neighboor)queue.append(neighboor)# 返回安全节点的升序列表return sorted(safe_nodes)
  1. C++语言版
class Solution {
public:vector<int> eventualSafeNodes(vector<vector<int>>& graph) {// 图中节点的个数int n = graph.size();// 用来存储反向图vector<vector<int>> reverseGraph(n);// 每个节点的出度vector<int> outDegree(n, 0);// 构建反向图和出度数组for (int i = 0; i < n; i++) {outDegree[i] = graph[i].size();for (int neighbor : graph[i]) {reverseGraph[neighbor].push_back(i);}}// 初始化队列,将所有终端节点(出度为0的节点)加入队列queue<int> q;// 用集合存储安全节点unordered_set<int> safeNodes;for (int i = 0; i < n; i++) {if (outDegree[i] == 0) {q.push(i);safeNodes.insert(i);}}// 逆向拓扑排序while (!q.empty()) {int node = q.front();q.pop();for (int neighbor : reverseGraph[node]) {outDegree[neighbor]--;if (outDegree[neighbor] == 0) {safeNodes.insert(neighbor);q.push(neighbor);}}}// 返回安全节点的升序列表vector<int> res(safeNodes.begin(), safeNodes.end());sort(res.begin(), res.end());return res;}
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. Python语言版
    在这里插入图片描述

  3. C++语言版
    在这里插入图片描述

http://www.yidumall.com/news/102377.html

相关文章:

  • 免费商品展示页面设计模板杭州seo网站
  • 巫山网站建设深圳seo网站优化公司
  • 京润珍珠企业网站优化网络推广运营
  • 廊坊网站建设精灵推广app大全
  • 装修公司网络营销怎么做seo技术教程网
  • 有没有找客户的网站seo外链发布平台有哪些
  • 做网站学什么专业小广告模板
  • 深圳保障性住房和安居房的区别谷歌网站优化推广
  • 网站建设分为多少模块友情链接什么意思
  • 100款免费软件网站大全北京网站seo优化推广
  • 青海旅游的网站建设上海seo优化
  • 做yy头像的网站企业网络营销策划书范文
  • 网站建设的目标是什么?提供了哪些栏目?百度热搜风云榜
  • 兼职做效果图的网站今日刚刚发生的国际新闻
  • wordpress证书安装重庆seo整站优化效果
  • 网站服务器做哪些安全措施手机广告推广软件
  • h5网页制作模板长沙网站seo外包
  • 三五互联网站报价表百度收录比较好的网站
  • 公司网站维护一般需要做什么提高网站权重的方法
  • 帝国 网站搬家网络营销模式有哪些
  • 南昌夜场招聘网站怎么做蓝牙耳机网络营销推广方案
  • 做一电影网站的apk新媒体营销推广方案
  • 龙岩网站报价游戏推广
  • vue做的网站域名汇总百度站内搜索的方法
  • 南充网站建设略奥网络wordpress免费网站
  • 国外旅游哪几个网站做攻略好口碑营销的概念是什么
  • 设计师一般是什么学历seoul是什么品牌
  • 为女朋友做网站二级域名分发平台
  • 天眼查公司查询企业查询官网路由优化大师
  • 专做网站的公司湖北最新消息