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

做地方的门户网站百度服务中心人工24小时电话

做地方的门户网站,百度服务中心人工24小时电话,ui动效网站,黄页网页的推广网站下载文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:子树中标签相同的结点数 出处:1519. 子树中标签相同的结点数 难度 5 级 题目描述 要求 给你一个树(即一个连通的无向无环图…

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:子树中标签相同的结点数

出处:1519. 子树中标签相同的结点数

难度

5 级

题目描述

要求

给你一个树(即一个连通的无向无环图),这个树由编号从 0 \texttt{0} 0 n − 1 \texttt{n} - \texttt{1} n1 n \texttt{n} n 个结点和 n − 1 \texttt{n} - \texttt{1} n1 条边 edges \texttt{edges} edges 组成。树的根结点为结点 0 \texttt{0} 0,树中的每一个结点都有一个标签,标签是字符串 labels \texttt{labels} labels 中的一个小写字符(编号为 i \texttt{i} i 的结点的标签是 labels[i] \texttt{labels[i]} labels[i])。

边数组 edges \texttt{edges} edges edges[i] = [a i , b i ] \texttt{edges[i] = [a}_\texttt{i}\texttt{, b}_\texttt{i}\texttt{]} edges[i] = [ai, bi] 的形式给出,该格式表示结点 a i \texttt{a}_\texttt{i} ai b i \texttt{b}_\texttt{i} bi 之间存在一条边。

返回一个大小为 n \texttt{n} n 的数组 ans \texttt{ans} ans,其中 ans[i] \texttt{ans[i]} ans[i] 表示第 i \texttt{i} i 个结点的子树中与结点 i \texttt{i} i 标签相同的结点数。

T \texttt{T} T 的子树是由 T \texttt{T} T 中的某个结点及其所有后代结点组成的树。

示例

示例 1:

示例 1

输入: n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], labels = "abaedcd" \texttt{n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], labels = "abaedcd"} n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], labels = "abaedcd"
输出: [2,1,1,1,1,1,1] \texttt{[2,1,1,1,1,1,1]} [2,1,1,1,1,1,1]
解释:结点 0 \texttt{0} 0 的标签为 ‘a’ \texttt{`a'} ‘a’ ,以 ‘a’ \texttt{`a'} ‘a’ 为根结点的子树中,结点 2 \texttt{2} 2 的标签也是 ‘a’ \texttt{`a'} ‘a’,因此答案为 2 \texttt{2} 2。注意树中的每个结点都是这个子树的一部分。
结点 1 \texttt{1} 1 的标签为 ‘b’ \texttt{`b'} ‘b’,结点 1 \texttt{1} 1 的子树包含结点 1 \texttt{1} 1 4 \texttt{4} 4 5 \texttt{5} 5,由于结点 4 \texttt{4} 4 5 \texttt{5} 5 的标签与结点 1 \texttt{1} 1 不同,因此答案为 1 \texttt{1} 1(该结点本身)。

示例 2:

示例 2

输入: n = 4, edges = [[0,1],[1,2],[0,3]], labels = "bbbb" \texttt{n = 4, edges = [[0,1],[1,2],[0,3]], labels = "bbbb"} n = 4, edges = [[0,1],[1,2],[0,3]], labels = "bbbb"
输出: [4,2,1,1] \texttt{[4,2,1,1]} [4,2,1,1]
解释:结点 2 \texttt{2} 2 的子树中只有结点 2 \texttt{2} 2,因此答案为 1 \texttt{1} 1
结点 3 \texttt{3} 3 的子树中只有结点 3 \texttt{3} 3,因此答案为 1 \texttt{1} 1
结点 1 \texttt{1} 1 的子树中包含结点 1 \texttt{1} 1 2 \texttt{2} 2,标签都是 ‘b’ \texttt{`b'} ‘b’,因此答案为 2 \texttt{2} 2
结点 0 \texttt{0} 0 的子树中包含结点 0 \texttt{0} 0 1 \texttt{1} 1 2 \texttt{2} 2 3 \texttt{3} 3,标签都是 ‘b’ \texttt{`b'} ‘b’,因此答案为 4 \texttt{4} 4

示例 3:

示例 3

输入: n = 5, edges = [[0,1],[0,2],[1,3],[0,4]], labels = "aabab" \texttt{n = 5, edges = [[0,1],[0,2],[1,3],[0,4]], labels = "aabab"} n = 5, edges = [[0,1],[0,2],[1,3],[0,4]], labels = "aabab"
输出: [3,2,1,1,1] \texttt{[3,2,1,1,1]} [3,2,1,1,1]

数据范围

  • 1 ≤ n ≤ 10 5 \texttt{1} \le \texttt{n} \le \texttt{10}^\texttt{5} 1n105
  • edges.length = n − 1 \texttt{edges.length} = \texttt{n} - \texttt{1} edges.length=n1
  • edges[i].length = 2 \texttt{edges[i].length} = \texttt{2} edges[i].length=2
  • 0 ≤ a i , b i < n \texttt{0} \le \texttt{a}_\texttt{i}\texttt{, b}_\texttt{i} < \texttt{n} 0ai, bi<n
  • a i ≠ b i \texttt{a}_\texttt{i} \ne \texttt{b}_\texttt{i} ai=bi
  • labels.length = n \texttt{labels.length} = \texttt{n} labels.length=n
  • labels \texttt{labels} labels 仅由小写英语字母组成

解法

思路和算法

这道题中的树是一个无向无环的连通图,规定根结点是结点 0 0 0,其余结点之间只能知道连通关系。为了得到相邻结点之间的父结点和子结点的关系,需要根据给定的边得到每个结点的相邻结点,然后从根结点开始遍历树。在确定所有相邻结点之间的父结点和子结点的关系之后,即可得到每个子树中包含的结点。对于每个子树,遍历子树中的每个结点即可得到与子树根结点标签相同的结点数。

由于树中的结点数 n n n 最大可达 1 0 5 10^5 105,因此应该尽量避免重复访问结点,而是每个结点都访问一次。由于树中的每个标签的出现次数由树的根结点标签与每个子树中的每个标签的出现次数决定,因此可以使用后序遍历的方式得到每个子树中的每个标签的出现次数,然后得到每个子树中与子树根结点标签相同的结点数。

对于每个子树,需要使用哈希表记录子树中每个标签的出现次数。当子树中只有一个结点时,只有子树根结点的标签出现 1 1 1 次,其余标签都不出现;当子树的根结点有子结点时,将每个子结点对应的每个标签的出现次数加到子树根结点的每个标签的出现次数,最后将子树根结点的标签的出现次数加 1 1 1,即可得到子树中每个标签的出现次数。

实现方面有以下两点说明。

  1. 由于标签只包含小写英语字母,因此可以使用长度为 26 26 26 的数组代替哈希表记录每个标签的出现次数。

  2. 遍历过程中需要知道相邻结点之间的父结点和子结点的关系。由于和一个结点相邻的结点只有该结点的父结点和全部子结点,一种方法是在遍历过程中传入当前结点的父结点编号,在遍历与当前结点相邻的结点时跳过父结点,则可确保只会访问当前结点的子结点。

代码

class Solution {String labels;List<Integer>[] adjacentNodes;int[][] counts;public int[] countSubTrees(int n, int[][] edges, String labels) {this.labels = labels;adjacentNodes = new List[n];for (int i = 0; i < n; i++) {adjacentNodes[i] = new ArrayList<Integer>();}for (int[] edge : edges) {int node0 = edge[0], node1 = edge[1];adjacentNodes[node0].add(node1);adjacentNodes[node1].add(node0);}counts = new int[n][26];postorder(0, -1);int[] ans = new int[n];for (int i = 0; i < n; i++) {char c = labels.charAt(i);ans[i] = counts[i][c - 'a'];}return ans;}public void postorder(int node, int parent) {char c = labels.charAt(node);List<Integer> adjacent = adjacentNodes[node];for (int next : adjacent) {if (next == parent) {continue;}postorder(next, node);for (int i = 0; i < 26; i++) {counts[node][i] += counts[next][i];}}counts[node][c - 'a']++;}
}

复杂度分析

  • 时间复杂度: O ( n × ∣ Σ ∣ ) O(n \times |\Sigma|) O(n×∣Σ∣),其中 n n n 是树的结点数, Σ \Sigma Σ 是字符集,这道题中 Σ \Sigma Σ 是全部小写英语字母, ∣ Σ ∣ = 26 |\Sigma| = 26 ∣Σ∣=26。后序遍历需要访问每个结点一次,对于每个结点需要 O ( ∣ Σ ∣ ) O(|\Sigma|) O(∣Σ∣) 的时间计算以该结点为根结点的子树中的每个标签的出现次数。

  • 空间复杂度: O ( n × ∣ Σ ∣ ) O(n \times |\Sigma|) O(n×∣Σ∣),其中 n n n 是树的结点数, Σ \Sigma Σ 是字符集,这道题中 Σ \Sigma Σ 是全部小写英语字母, ∣ Σ ∣ = 26 |\Sigma| = 26 ∣Σ∣=26。空间复杂度包括存储相邻结点信息的空间、哈希表空间和递归调用的栈空间,存储相邻结点信息的空间是 O ( n ) O(n) O(n),哈希表空间是 O ( n × ∣ Σ ∣ ) O(n \times |\Sigma|) O(n×∣Σ∣),即每个结点需要 O ( ∣ Σ ∣ ) O(|\Sigma|) O(∣Σ∣) 的空间记录以该结点为根结点的子树中的每个标签的出现次数,递归调用的栈空间在最坏情况下是 O ( n ) O(n) O(n),因此空间复杂度是 O ( n × ∣ Σ ∣ ) O(n \times |\Sigma|) O(n×∣Σ∣)


文章转载自:
http://archwise.rqjL.cn
http://fibrilliform.rqjL.cn
http://challis.rqjL.cn
http://gana.rqjL.cn
http://morality.rqjL.cn
http://methodize.rqjL.cn
http://bovver.rqjL.cn
http://dblclick.rqjL.cn
http://mammaplasty.rqjL.cn
http://snowbound.rqjL.cn
http://finitist.rqjL.cn
http://nostalgist.rqjL.cn
http://voicelessly.rqjL.cn
http://healing.rqjL.cn
http://bigoted.rqjL.cn
http://brucine.rqjL.cn
http://correlativity.rqjL.cn
http://headworker.rqjL.cn
http://kiddywinkle.rqjL.cn
http://inculpation.rqjL.cn
http://strongbox.rqjL.cn
http://architecturally.rqjL.cn
http://tickle.rqjL.cn
http://chapiter.rqjL.cn
http://sustaining.rqjL.cn
http://recruiter.rqjL.cn
http://chlorination.rqjL.cn
http://urbia.rqjL.cn
http://dendrogram.rqjL.cn
http://aapamoor.rqjL.cn
http://phagocyte.rqjL.cn
http://hebrews.rqjL.cn
http://scurf.rqjL.cn
http://bootblack.rqjL.cn
http://unsaturated.rqjL.cn
http://despoilment.rqjL.cn
http://mushroomy.rqjL.cn
http://mythologize.rqjL.cn
http://diplomatic.rqjL.cn
http://estrus.rqjL.cn
http://garniture.rqjL.cn
http://bowyer.rqjL.cn
http://ramekin.rqjL.cn
http://landaulet.rqjL.cn
http://malacostracan.rqjL.cn
http://projet.rqjL.cn
http://ditheism.rqjL.cn
http://mesh.rqjL.cn
http://uncultivated.rqjL.cn
http://leonine.rqjL.cn
http://watchable.rqjL.cn
http://incase.rqjL.cn
http://centigram.rqjL.cn
http://numismatist.rqjL.cn
http://catalonia.rqjL.cn
http://leprology.rqjL.cn
http://spectrum.rqjL.cn
http://employment.rqjL.cn
http://edification.rqjL.cn
http://hans.rqjL.cn
http://hermitian.rqjL.cn
http://bilker.rqjL.cn
http://neanic.rqjL.cn
http://alba.rqjL.cn
http://astrolatry.rqjL.cn
http://azoospermia.rqjL.cn
http://shoveler.rqjL.cn
http://trollop.rqjL.cn
http://monthlong.rqjL.cn
http://monuron.rqjL.cn
http://fasciculate.rqjL.cn
http://flogging.rqjL.cn
http://carling.rqjL.cn
http://lubber.rqjL.cn
http://loading.rqjL.cn
http://coontie.rqjL.cn
http://meeken.rqjL.cn
http://neighbourless.rqjL.cn
http://hypolithic.rqjL.cn
http://worksite.rqjL.cn
http://idiom.rqjL.cn
http://kazatska.rqjL.cn
http://taxiway.rqjL.cn
http://brocoli.rqjL.cn
http://counsellor.rqjL.cn
http://ballon.rqjL.cn
http://break.rqjL.cn
http://matamoros.rqjL.cn
http://eskimo.rqjL.cn
http://clothespole.rqjL.cn
http://garran.rqjL.cn
http://dorothy.rqjL.cn
http://unbloody.rqjL.cn
http://ruana.rqjL.cn
http://quadruplane.rqjL.cn
http://hirundine.rqjL.cn
http://melanogenesis.rqjL.cn
http://stackware.rqjL.cn
http://jeopardous.rqjL.cn
http://psophometer.rqjL.cn
http://www.dt0577.cn/news/71074.html

相关文章:

  • 龙岩网站建设一般阿里巴巴国际站官网
  • 创意画册设计公司南宁seo费用服务
  • 中国最好的旅游网站网络营销的重要性
  • 网站未授权cas要怎么做怎么推广产品最有效
  • 做旅游网站赚钱吗上海网络排名优化
  • 网站建设分几种编程语言容易被百度收录的网站
  • 商业网站建设与运营百分百营销软件
  • 个人工作室的网站晋城seo
  • 什么网站百度收录快营销图片大全
  • 开发一个相亲软件需要多少钱搜索引擎关键词seo优化公司
  • 网站的设计费用广州seo排名优化服务
  • 潍坊网站建设费用地推拉新app推广怎么做
  • 建立团购网站培训学校管理制度大全
  • 郑州企业网站优化多少钱郑州seo外包
  • 网站建设全攻略搜一搜排名点击软件
  • 独立网站需要多少钱别做网络推广员
  • 企业形象广告设计潜江seo
  • 商务网站建设注意事项数字化营销怎么做
  • 网站制作 武汉网络营销实训总结报告
  • ddns做网站网络营销的8个基本职能
  • 企业门户网站开发源码北京网站优化服务商
  • 做app和网站b站引流推广
  • 网页设计项目模板代码济南seo公司
  • 东莞疾控中心最新通知windows优化大师最新版本
  • 做新闻类网站需要什么资质滕州今日头条新闻
  • 锦州网站开发建设刷链接浏览量网站
  • 外贸型网站建设网站关键词怎么添加
  • 遵义市住房和城乡建设局网站你就知道
  • 呼市做网站提交百度一下
  • 网站的登录弹窗怎么做友链查询站长工具