From fc2d1a68644b057bcb3651719aa75f28f6e82609 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: 2022年11月13日 15:38:09 -0800 Subject: [PATCH 01/10] Create 2467.Most-Profitable-Path-in-a-Tree.cpp --- .../2467.Most-Profitable-Path-in-a-Tree.cpp | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp diff --git a/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp b/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp new file mode 100644 index 000000000..8c8d0db73 --- /dev/null +++ b/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp @@ -0,0 +1,68 @@ +class Solution { + vector next[100005]; + int b[100005]; + int bob; + int n; + int ret = INT_MIN; + vectoramount; +public: + int mostProfitablePath(vector>& edges, int bob, vector& amount) + { + this->n = amount.size(); + this->bob = bob; + this->amount = amount; + + for (int i=0; i Date: 2022年11月13日 15:43:28 -0800 Subject: [PATCH 02/10] Update Readme.md --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index d0fba82b9..95a524330 100644 --- a/Readme.md +++ b/Readme.md @@ -240,6 +240,7 @@ [2313.Minimum-Flips-in-Binary-Tree-to-Get-Result](https://github.com/wisdompeak/LeetCode/tree/master/Tree/2313.Minimum-Flips-in-Binary-Tree-to-Get-Result) (H) [2322.Minimum-Score-After-Removals-on-a-Tree](https://github.com/wisdompeak/LeetCode/tree/master/Tree/2322.Minimum-Score-After-Removals-on-a-Tree) (H-) [2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries](https://github.com/wisdompeak/LeetCode/tree/master/Tree/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries) (M+) +[2467.Most-Profitable-Path-in-a-Tree](https://github.com/wisdompeak/LeetCode/tree/master/Tree/2467.Most-Profitable-Path-in-a-Tree) (M+) * ``Path in a tree`` [543.Diameter-of-Binary-Tree](https://github.com/wisdompeak/LeetCode/tree/master/Tree/543.Diameter-of-Binary-Tree) (M) [124.Binary-Tree-Maximum-Path-Sum](https://github.com/wisdompeak/LeetCode/tree/master/Tree/124.Binary-Tree-Maximum-Path-Sum) (M) From ab295231552fd43533c2408c08390cc56bd308ad Mon Sep 17 00:00:00 2001 From: wisdompeak Date: 2022年11月13日 15:48:54 -0800 Subject: [PATCH 03/10] Create Readme.md --- Tree/2467.Most-Profitable-Path-in-a-Tree/Readme.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Tree/2467.Most-Profitable-Path-in-a-Tree/Readme.md diff --git a/Tree/2467.Most-Profitable-Path-in-a-Tree/Readme.md b/Tree/2467.Most-Profitable-Path-in-a-Tree/Readme.md new file mode 100644 index 000000000..0675fe188 --- /dev/null +++ b/Tree/2467.Most-Profitable-Path-in-a-Tree/Readme.md @@ -0,0 +1,5 @@ +### 2467.Most-Profitable-Path-in-a-Tree + +两次遍历全树。第一次遍历求得每个点到bob所在节点的距离(但只限bob节点往上的部分)。第二次遍历求每个点与root的距离。 + +对于每个节点而言,如果前者大于后者,则对于Alice而言没有收益。如果前者小于后者,则Alice可以拿取该节点的价值。基于这个原则,第二次dfs的时候可以求得收益最大的一条从root到leaf的路径。 From d827130a986d345629c43d335ae899c4e7a016d2 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: 2022年11月13日 15:50:17 -0800 Subject: [PATCH 04/10] Update Readme.md --- Tree/2467.Most-Profitable-Path-in-a-Tree/Readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tree/2467.Most-Profitable-Path-in-a-Tree/Readme.md b/Tree/2467.Most-Profitable-Path-in-a-Tree/Readme.md index 0675fe188..aef344e50 100644 --- a/Tree/2467.Most-Profitable-Path-in-a-Tree/Readme.md +++ b/Tree/2467.Most-Profitable-Path-in-a-Tree/Readme.md @@ -3,3 +3,5 @@ 两次遍历全树。第一次遍历求得每个点到bob所在节点的距离(但只限bob节点往上的部分)。第二次遍历求每个点与root的距离。 对于每个节点而言,如果前者大于后者,则对于Alice而言没有收益。如果前者小于后者,则Alice可以拿取该节点的价值。基于这个原则,第二次dfs的时候可以求得收益最大的一条从root到leaf的路径。 + +通过本题,需要掌握不需要建rooted tree的dfs方法,即`dfs(cur, parent)`。当`next[cur]!=parent`时,可以继续递归`dfs(next[cur], cur)`。 From 950bc19c9e2a050f33d144a3af5029dec36c3c4c Mon Sep 17 00:00:00 2001 From: wisdompeak Date: 2022年11月13日 15:53:33 -0800 Subject: [PATCH 05/10] Update 2467.Most-Profitable-Path-in-a-Tree.cpp --- .../2467.Most-Profitable-Path-in-a-Tree.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp b/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp index 8c8d0db73..c77891b83 100644 --- a/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp +++ b/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp @@ -36,15 +36,15 @@ class Solution { return; } - int near = INT_MAX/2; + int toBob = INT_MAX/2; for (int nxt: next[cur]) { if (nxt==parent) continue; dfs(nxt, cur, step+1); - near = min(near, b[nxt]); + toBob = min(toBob, b[nxt]+1); } - b[cur] = min(near+1, INT_MAX/2); + b[cur] = toBob; return; } From 22164d95c6a82921c8b307ba4db0aa1852874245 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: 2022年11月13日 16:36:25 -0800 Subject: [PATCH 06/10] Update 2467.Most-Profitable-Path-in-a-Tree.cpp --- .../2467.Most-Profitable-Path-in-a-Tree.cpp | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp b/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp index c77891b83..25e5f7de9 100644 --- a/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp +++ b/Tree/2467.Most-Profitable-Path-in-a-Tree/2467.Most-Profitable-Path-in-a-Tree.cpp @@ -1,18 +1,18 @@ class Solution { - vector next[100005]; int b[100005]; + vectornext[100005]; + int ret = INT_MIN/2; int bob; - int n; - int ret = INT_MIN; vectoramount; public: int mostProfitablePath(vector>& edges, int bob, vector& amount) { - this->n = amount.size(); this->bob = bob; this->amount = amount; - for (int i=0; i Date: 2022年11月13日 16:38:58 -0800 Subject: [PATCH 07/10] Create 2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp --- ...rations-to-Sort-a-Binary-Tree-by-Level.cpp | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp diff --git a/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp b/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp new file mode 100644 index 000000000..3a8b8ca38 --- /dev/null +++ b/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp @@ -0,0 +1,49 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode() : val(0), left(nullptr), right(nullptr) {} + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} + * }; + */ +class Solution { + vectorlevel[100005]; + int maxDepth = 0; +public: + int minimumOperations(TreeNode* root) + { + dfs(root, 0); + int count = 0; + for (int t=0; t<=maxdepth; t++) + { + auto sorted = level[t]; + sort(sorted.begin(), sorted.end()); + unordered_maprank; + for (int i=0; ival); + dfs(node->left, depth+1); + dfs(node->right, depth+1); + } +}; From 380b4f0ee3b0b05e5da885df33fafb22daaf6fd9 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: 2022年11月13日 16:39:23 -0800 Subject: [PATCH 08/10] Update Readme.md --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 95a524330..509d25d92 100644 --- a/Readme.md +++ b/Readme.md @@ -1223,6 +1223,7 @@ [442.Find-All-Duplicates-in-an-Array](https://github.com/wisdompeak/LeetCode/blob/master/Greedy/442.Find-All-Duplicates-in-an-Array) (M) [448.Find-All-Numbers-Disappeared-in-an-Array](https://github.com/wisdompeak/LeetCode/tree/master/Greedy/448.Find-All-Numbers-Disappeared-in-an-Array) (M) [645.Set-Mismatch](https://github.com/wisdompeak/LeetCode/tree/master/Greedy/645.Set-Mismatch) (M) +[2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level](https://github.com/wisdompeak/LeetCode/tree/master/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level) (M+) * ``Parenthesis`` [032.Longest-Valid-Parentheses](https://github.com/wisdompeak/LeetCode/tree/master/Stack/032.Longest-Valid-Parentheses) (H) [921.Minimum-Add-to-Make-Parentheses-Valid](https://github.com/wisdompeak/LeetCode/tree/master/Greedy/921.Minimum-Add-to-Make-Parentheses-Valid) (M+) From 6deccd4caea74999b1514e9fac1a302c402b6a43 Mon Sep 17 00:00:00 2001 From: wisdompeak Date: 2022年11月13日 16:41:26 -0800 Subject: [PATCH 09/10] Update 2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp --- ...mber-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp b/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp index 3a8b8ca38..1708f0a3f 100644 --- a/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp +++ b/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level.cpp @@ -19,18 +19,19 @@ class Solution { int count = 0; for (int t=0; t<=maxdepth; t++) { - auto sorted = level[t]; + auto& nums = level[t]; + auto sorted = nums; sort(sorted.begin(), sorted.end()); unordered_maprank; for (int i=0; i Date: 2022年11月13日 16:46:36 -0800 Subject: [PATCH 10/10] Create Readme.md --- .../Readme.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Readme.md diff --git a/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Readme.md b/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Readme.md new file mode 100644 index 000000000..62d16b8f3 --- /dev/null +++ b/Greedy/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Readme.md @@ -0,0 +1,7 @@ +### 2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level + +将属于同一个level的数字都收集起来。然后用Indexing sort的方法去贪心地交换。 + +比如说,对于一个乱序的nums数组,我们可以提前知道每个数字的期望位置rank[nums[i]]。我们就从前往后查看每一个位置,如果当前的`rank[nums[i]]!=i`,那么就把nums[i]与位于rank[nums[i]]的数字交换。这样的交换可以持续多次,直至我们在i这个位置上迎来期望的数字。 + +为什么一定能够迎来期望的数字呢?因为每一次交换,我们都把一个数字送到了它应该在的位置。一旦把n-1个数字都放到了它们对应期望的位置,那么i这个位置的数字一定也已经安排到了期望的数字。

AltStyle によって変換されたページ (->オリジナル) /