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

king 主题WordPressseo优化报告

king 主题WordPress,seo优化报告,公众号运营总结,cpa广告联盟网站建设教程1.题目基本信息 1.1.题目描述 有一棵有 n 个节点,编号从 0 到 n - 1 的 无向 树。给定一个长度为 n - 1 的整数数组 edges,其中 edges[i] [ui, vi] 表示树中的 ui 和 vi 之间有一条边。 一开始,所有 节点都 未标记。之后的每一秒&#xf…

1.题目基本信息

1.1.题目描述

有一棵有 n 个节点,编号从 0 到 n - 1 的 无向 树。给定一个长度为 n - 1 的整数数组 edges,其中 edges[i] = [ui, vi] 表示树中的 ui 和 vi 之间有一条边。

一开始,所有 节点都 未标记。之后的每一秒,你需要标记所有 至少 有一个已标记节点相邻的未标记节点。

返回一个数组 nodes,表示在时刻 t = 0 标记了节点 i,那么树中最后标记的节点是 nodes[i]。如果对于任意节点 i 有多个 nodes[i],你可以选择 任意 一个作为答案。

1.2.题目地址

https://leetcode.cn/problems/find-the-last-marked-nodes-in-tree/description/

2.解题方法

2.1.解题思路

深度优先搜索+广度优先搜索

时间复杂度:O(n)

2.2.解题步骤

第一步,构建无向图的邻接表

第二步,深度优先搜索求树的直径的两个端点p1,p2。参考:Leetcode 1522. N 叉树的直径

2.1.递归出口;当node为叶节点时,递归退出(注意排除根节点0)

2.2.递归主体;使用maxLen1和maxLen2分别维护node结点到达叶节点第一长和第二长的路径长度,node1和node2维护node结点到达叶节点第一长和第二长的路径的叶节点

2.3.调整顺序,保证subMaxLen1>=subMaxLen2

2.4.根据子节点的到叶节点的最长路径更新当前节点到达叶节点的第一长和第二长路径信息

2.5.更新直径和直径两端节点的信息

第三步,调用深搜递归函数,更新直径信息。随后分别对p1,p2两个结点进行广度优先搜索,获取各个结点距离端点p1,p2的距离的数组dists1,dists2

第四步,遍历所有节点,枚举结点node,根据dists1和dists2选择p1和p2中距离node更远的节点,构建数组result,并进行返回

3.解题代码

Python代码

from collections import dequeclass Solution:def lastMarkedNodes(self, edges: List[List[int]]) -> List[int]:# 思路:深度优先搜索+广度优先搜索n = len(edges) + 1  # 结点的总数# 第一步,构建无向图的邻接表graph = [[] for _ in range(n)]for a, b in edges:graph[a].append(b)graph[b].append(a)# 第二步,深度优先搜索求树的直径的两个端点p1,p2。参考:Leetcode 1522. N 叉树的直径visited = set()self.maxLength, self.p1, self.p2 = 0, 0, 0def dfs(node:int) -> list[int]:visited.add(node)# 2.1.递归出口;当node为叶节点时,递归退出(注意排除根节点0)if node != 0 and len(graph[node]) == 1:return 0, 0, node, node# 2.2.递归主体;使用maxLen1和maxLen2分别维护node结点到达叶节点第一长和第二长的路径长度,node1和node2维护node结点到达叶节点第一长和第二长的路径的叶节点maxLen1, maxLen2, node1, node2 = 0, 0, 0, 0for child in graph[node]:if child in visited:# 如果已经访问过了,则跳过,模拟N叉树continuesubMaxLen1, subMaxLen2, subNode1, subNode2 = dfs(child)# 2.3.调整顺序,保证subMaxLen1>=subMaxLen2if subMaxLen1 < subMaxLen2:subMaxLen1, subMaxLen2 = subMaxLen2, subMaxLen1subNode1, subNode2 = subNode2, subNode1# 2.4.根据子节点的到叶节点的最长路径更新当前节点到达叶节点的第一长和第二长路径信息if subMaxLen1 + 1 >= maxLen1:maxLen2, node2 = maxLen1, node1maxLen1, node1 = subMaxLen1 + 1, subNode1elif subMaxLen1 + 1 >= maxLen2:maxLen2, node2 = subMaxLen1 + 1, subNode1# 2.5.更新直径和直径两端节点的信息if self.maxLength <= maxLen1 + maxLen2:self.maxLength = maxLen1 + maxLen2self.p1, self.p2 = node1, node2return maxLen1, maxLen2, node1, node2# print(self.p1, self.p2)# 第三步,调用深搜递归函数,更新直径信息。随后分别对p1,p2两个结点进行广度优先搜索,获取各个结点距离端点p1,p2的距离的数组dists1,dists2dfs(0)dists1, dists2 = [0] * n, [0] * nvisited1, visited2 = set([self.p1]), set([self.p2])que1, que2 = deque([self.p1]), deque([self.p2])slice1, slice2 = 1, 1while que1:for _ in range(len(que1)):node = que1.popleft()for child in graph[node]:if child not in visited1:que1.append(child)visited1.add(child)dists1[child] = slice1slice1 += 1# print(dists1)while que2:for _ in range(len(que2)):node = que2.popleft()for child in graph[node]:if child not in visited2:que2.append(child)visited2.add(child)dists2[child] = slice2slice2 += 1# print(dists2)# 第四步,遍历所有节点,枚举结点node,根据dists1和dists2选择p1和p2中距离node更远的节点,构建数组result,并进行返回result = [0] * nfor i in range(n):result[i] = self.p1 if dists1[i] > dists2[i] else self.p2return result

4.执行结果

http://www.dtcms.com/wzjs/373927.html

相关文章:

  • 深圳网红打卡旅游景点青岛网站建设优化
  • 可以发外链的网站或平台有哪些seo优化百度技术排名教程
  • 网络工作室骗局立即优化在哪里
  • 专业做网站哪里有营销团队
  • 企业网站建设的具体需求小红书怎么做关键词排名优化
  • 继续教育网站怎么做不了作业搜索引擎收录
  • 网站建设合同制人员招聘手机seo关键词优化
  • 贵阳网站建设q479185700惠温州seo排名公司
  • 国内做赌博网站风险大吗最新国际新闻热点事件
  • 屏蔽蜘蛛网站还会被收录吗如何免费发布广告
  • 网站开发费用多少南宁网站制作
  • 网站怎么做3d商品浏览谷歌app下载
  • 动易 网站顶部导航 sitefactory近三天发生的大事
  • 网站开发需要学些什么网络营销的特点有哪些
  • 上海定制网站建设费用下载百度网盘app
  • 设计的网站有哪些专业技能培训机构
  • 百度上推广一个网站该怎么做seo是谁
  • 软件开发工程师中级职称前端性能优化有哪些方法
  • 杭州网站建设zj net百度推广管理平台登录
  • 内蒙古建设厅网站宣传推广的十种方式
  • 网站建设培训方案google推广及广告优缺点
  • 岳阳汨罗网站建设网站优化系统
  • 广州快速建站哪家服务专业网页自助建站
  • 河南造价信息网官网哪个网站学seo是免费的
  • 兰州网站设计厂家上海公布最新情况
  • 体育用品电子商务网站建设方案互联网营销的方式有哪些
  • 网站报名怎么做企业网站的推广阶段
  • 沙漠风网站建设怎么样公众号软文素材
  • 开发app的注意事项做网站优化的公司
  • 用凡科做的手机网站版如何做推广宣传