Skip to content

Commit 8310456

Browse files
authored
update: 添加问题“3372.连接两棵树后最大目标节点数目I”的代码和题解(#962)
* 3372: WA.cpp (#961) Signed-off-by: LetMeFly666 <[email protected]> * 3372: WA.cpp (#961) Signed-off-by: LetMeFly666 <[email protected]> * 3372: WA.cpp (#961) Signed-off-by: LetMeFly666 <[email protected]> * 3372: AC.(cpp+py)+CE.java (#961) cpp - AC,75.44%,71.93% py - AC,88.89%,66.67% Signed-off-by: LetMeFly666 <[email protected]> * 3372: CE.java (#961) Signed-off-by: LetMeFly666 <[email protected]> * 3372: AC.java (#961) java - AC,92.00%,96.00% Signed-off-by: LetMeFly666 <[email protected]> * 3372: WA.go (#961) Signed-off-by: LetMeFly666 <[email protected]> * 3372: AC.go (#961) AC,50.00%,87.50% Signed-off-by: LetMeFly666 <[email protected]> * update: 添加问题“3372.连接两棵树后最大目标节点数目I”的代码和题解(#962) Signed-off-by: LetMeFly666 <[email protected]> * fix: 空间复杂度(#962) Signed-off-by: LetMeFly666 <[email protected]> --------- Signed-off-by: LetMeFly666 <[email protected]>
1 parent ae49728 commit 8310456

7 files changed

+482
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* @Author: LetMeFly
3+
* @Date: 2025-05-28 21:43:27
4+
* @LastEditors: LetMeFly.xyz
5+
* @LastEditTime: 2025-05-28 22:55:41
6+
*/
7+
#if defined(_WIN32) || defined(__APPLE__)
8+
#include "_[1,2]toVector.h"
9+
#endif
10+
11+
class Solution {
12+
private:
13+
vector<vector<int>> buildTree(vector<vector<int>>& edges) {
14+
vector<vector<int>> graph(edges.size() + 1);
15+
for (vector<int>& edge : edges) {
16+
graph[edge[0]].push_back(edge[1]);
17+
graph[edge[1]].push_back(edge[0]);
18+
}
19+
return graph;
20+
}
21+
22+
int dfs(vector<vector<int>>& graph, int lastNode, int thisNode, int k) {
23+
if (k < 0) {
24+
return 0;
25+
}
26+
int ans = 1;
27+
for (int nextNode : graph[thisNode]) {
28+
if (nextNode == lastNode) {
29+
continue;
30+
}
31+
ans += dfs(graph, thisNode, nextNode, k - 1);
32+
}
33+
return ans;
34+
}
35+
public:
36+
vector<int> maxTargetNodes(vector<vector<int>>& edges1, vector<vector<int>>& edges2, int k) {
37+
vector<vector<int>> graph2 = buildTree(edges2);
38+
int add = 0;
39+
for (int i = 0; i <= edges2.size(); i++) {
40+
add = max(add, dfs(graph2, -1, i, k - 1));
41+
}
42+
vector<vector<int>> graph1 = buildTree(edges1);
43+
vector<int> ans(graph1.size());
44+
for (int i = 0; i < ans.size(); i++) {
45+
ans[i] = dfs(graph1, -1, i, k) + add;
46+
}
47+
return ans;
48+
}
49+
};
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* @Author: LetMeFly
3+
* @Date: 2025-05-28 21:43:27
4+
* @LastEditors: LetMeFly.xyz
5+
* @LastEditTime: 2025-05-29 00:43:41
6+
*/
7+
package main
8+
9+
func buildTree3372(edges [][]int) [][]int {
10+
ans := make([][]int, len(edges) + 1)
11+
for _, edge := range edges {
12+
ans[edge[0]] = append(ans[edge[0]], edge[1])
13+
ans[edge[1]] = append(ans[edge[1]], edge[0])
14+
}
15+
return ans
16+
}
17+
18+
func dfs3372(tree [][]int, lastNode, thisNode, k int) int {
19+
if k < 0 {
20+
return 0
21+
}
22+
ans := 1
23+
for _, nextNode := range tree[thisNode] {
24+
if nextNode != lastNode {
25+
ans += dfs3372(tree, thisNode, nextNode, k - 1)
26+
}
27+
}
28+
return ans
29+
}
30+
31+
func maxTargetNodes(edges1 [][]int, edges2 [][]int, k int) []int {
32+
tree2 := buildTree3372(edges2)
33+
toAdd := 0
34+
for i := range tree2 {
35+
toAdd = max(toAdd, dfs3372(tree2, -1, i, k - 1))
36+
}
37+
tree1 := buildTree3372(edges1)
38+
ans := make([]int, len(tree1))
39+
for i := range ans {
40+
ans[i] = toAdd + dfs3372(tree1, -1, i, k)
41+
}
42+
return ans
43+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* @Author: LetMeFly
3+
* @Date: 2025-05-28 21:43:27
4+
* @LastEditors: LetMeFly.xyz
5+
* @LastEditTime: 2025-05-28 23:21:21
6+
*/
7+
import java.util.List;
8+
import java.util.ArrayList;
9+
10+
class Solution {
11+
private List<Integer>[] buildTree(int[][] edges) {
12+
List<Integer>[] ans = new ArrayList[edges.length + 1];
13+
for (int i = 0; i < ans.length; i++) {
14+
ans[i] = new ArrayList<>();
15+
}
16+
for (int[] edge : edges) {
17+
ans[edge[0]].add(edge[1]);
18+
ans[edge[1]].add(edge[0]);
19+
}
20+
return ans;
21+
}
22+
23+
private int dfs(List<Integer>[] tree, int lastNode, int thisNode, int k) {
24+
if (k < 0) {
25+
return 0;
26+
}
27+
int ans = 1;
28+
for (int nextNode : tree[thisNode]) {
29+
if (nextNode != lastNode) {
30+
ans += dfs(tree, thisNode, nextNode, k - 1);
31+
}
32+
}
33+
return ans;
34+
}
35+
36+
public int[] maxTargetNodes(int[][] edges1, int[][] edges2, int k) {
37+
List<Integer>[] tree2 = buildTree(edges2);
38+
int add = 0;
39+
for (int i = 0; i < tree2.length; i++) {
40+
add = Math.max(add, dfs(tree2, -1, i, k - 1));
41+
}
42+
List<Integer>[] tree1 = buildTree(edges1);
43+
int[] ans = new int[tree1.length];
44+
for (int i = 0; i < ans.length; i++) {
45+
ans[i] = add + dfs(tree1, -1, i, k);
46+
}
47+
return ans;
48+
}
49+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'''
2+
Author: LetMeFly
3+
Date: 2025-05-28 21:43:27
4+
LastEditors: LetMeFly.xyz
5+
LastEditTime: 2025-05-28 23:05:02
6+
'''
7+
from typing import List
8+
9+
class Solution:
10+
def buildTree(self, edges: List[List[int]]) -> List[List[int]]:
11+
ans = [[] for _ in range(len(edges) + 1)]
12+
for x, y in edges:
13+
ans[x].append(y)
14+
ans[y].append(x)
15+
return ans
16+
17+
def dfs(self, tree: List[List[int]], lastNode: int, thisNode: int, k: int) -> int:
18+
if k < 0:
19+
return 0
20+
ans = 1
21+
for nextNode in tree[thisNode]:
22+
if nextNode != lastNode:
23+
ans += self.dfs(tree, thisNode, nextNode, k - 1)
24+
return ans
25+
26+
def maxTargetNodes(self, edges1: List[List[int]], edges2: List[List[int]], k: int) -> List[int]:
27+
tree2 = self.buildTree(edges2)
28+
toAdd = max(self.dfs(tree2, -1, i, k - 1) for i in range(len(tree2)))
29+
tree1 = self.buildTree(edges1)
30+
return [self.dfs(tree1, -1, i, k) + toAdd for i in range(len(tree1))]

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,7 @@
979979
|3355.零数组变换I|中等|<a href="https://leetcode.cn/problems/zero-array-transformation-i/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2025/05/21/LeetCode%203355.%E9%9B%B6%E6%95%B0%E7%BB%84%E5%8F%98%E6%8D%A2I/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/148126611" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/zero-array-transformation-i/solutions/3683113/letmefly-3355ling-shu-zu-bian-huan-ichai-njzr/" target="_blank">LeetCode题解</a>|
980980
|3356.零数组变换II|中等|<a href="https://leetcode.cn/problems/zero-array-transformation-ii/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2025/05/22/LeetCode%203356.%E9%9B%B6%E6%95%B0%E7%BB%84%E5%8F%98%E6%8D%A2II/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/148151470" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/zero-array-transformation-ii/solutions/3683924/letmefly-3356ling-shu-zu-bian-huan-iier-zrey9/" target="_blank">LeetCode题解</a>|
981981
|3362.零数组变换III|中等|<a href="https://leetcode.cn/problems/zero-array-transformation-iii/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2025/05/24/LeetCode%203362.%E9%9B%B6%E6%95%B0%E7%BB%84%E5%8F%98%E6%8D%A2III/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/148192450" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/zero-array-transformation-iii/solutions/3684942/letmefly-3362ling-shu-zu-bian-huan-iiita-qfve/" target="_blank">LeetCode题解</a>|
982+
|3372.连接两棵树后最大目标节点数目I|中等|<a href="https://leetcode.cn/problems/maximize-the-number-of-target-nodes-after-connecting-trees-i/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2025/05/29/LeetCode%203372.%E8%BF%9E%E6%8E%A5%E4%B8%A4%E6%A3%B5%E6%A0%91%E5%90%8E%E6%9C%80%E5%A4%A7%E7%9B%AE%E6%A0%87%E8%8A%82%E7%82%B9%E6%95%B0%E7%9B%AEI/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/148308690" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/maximize-the-number-of-target-nodes-after-connecting-trees-i/solutions/3688776/letmefly-3372lian-jie-liang-ke-shu-hou-z-l917/" target="_blank">LeetCode题解</a>|
982983
|3375.使数组的值全部为K的最少操作次数|简单|<a href="https://leetcode.cn/problems/minimum-operations-to-make-array-values-equal-to-k/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2025/04/09/LeetCode%203375.%E4%BD%BF%E6%95%B0%E7%BB%84%E7%9A%84%E5%80%BC%E5%85%A8%E9%83%A8%E4%B8%BAK%E7%9A%84%E6%9C%80%E5%B0%91%E6%93%8D%E4%BD%9C%E6%AC%A1%E6%95%B0/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/147104288" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/minimum-operations-to-make-array-values-equal-to-k/solutions/3646138/letmefly-3375shi-shu-zu-de-zhi-quan-bu-w-i71e/" target="_blank">LeetCode题解</a>|
983984
|3392.统计符合条件长度为3的子数组数目|简单|<a href="https://leetcode.cn/problems/count-subarrays-of-length-three-with-a-condition/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2025/04/29/LeetCode%203392.%E7%BB%9F%E8%AE%A1%E7%AC%A6%E5%90%88%E6%9D%A1%E4%BB%B6%E9%95%BF%E5%BA%A6%E4%B8%BA3%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84%E6%95%B0%E7%9B%AE/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/147603015" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/count-subarrays-of-length-three-with-a-condition/solutions/3665081/letmefly-3392tong-ji-fu-he-tiao-jian-cha-h935/" target="_blank">LeetCode题解</a>|
984985
|3396.使数组元素互不相同所需的最少操作次数|简单|<a href="https://leetcode.cn/problems/minimum-number-of-operations-to-make-elements-in-array-distinct/" target="_blank">题目地址</a>|<a href="https://blog.letmefly.xyz/2025/04/08/LeetCode%203396.%E4%BD%BF%E6%95%B0%E7%BB%84%E5%85%83%E7%B4%A0%E4%BA%92%E4%B8%8D%E7%9B%B8%E5%90%8C%E6%89%80%E9%9C%80%E7%9A%84%E6%9C%80%E5%B0%91%E6%93%8D%E4%BD%9C%E6%AC%A1%E6%95%B0/" target="_blank">题解地址</a>|<a href="https://letmefly.blog.csdn.net/article/details/147080178" target="_blank">CSDN题解</a>|<a href="https://leetcode.cn/problems/minimum-number-of-operations-to-make-elements-in-array-distinct/solutions/3644951/letmefly-3396shi-shu-zu-yuan-su-hu-bu-xi-glg4/" target="_blank">LeetCode题解</a>|

0 commit comments

Comments
 (0)