From ea5d8669d4363db9cf195d6bd01f956101d409c9 Mon Sep 17 00:00:00 2001 From: acbin <44314231+acbin@users.noreply.github.com> Date: Fri, 12 Jan 2024 08:56:02 +0800 Subject: [PATCH 1/3] feat: update lc problems (#2208) Co-authored-by: Doocs Bot --- .../README_EN.md | 17 +++++++++++------ .../README.md | 4 ++-- .../README_EN.md | 4 ++-- .../images/20231216-134017.png | Bin 0 -> 24579 bytes .../images/20231216-134026.png | Bin 0 -> 18116 bytes solution/DATABASE_README.md | 4 ++-- solution/README.md | 6 +++--- solution/database-summary.md | 4 ++-- solution/summary.md | 6 +++--- 9 files changed, 25 insertions(+), 20 deletions(-) create mode 100644 solution/3000-3099/3004.Maximum Subtree of the Same Color/images/20231216-134017.png create mode 100644 solution/3000-3099/3004.Maximum Subtree of the Same Color/images/20231216-134026.png diff --git a/solution/2700-2799/2746.Decremental String Concatenation/README_EN.md b/solution/2700-2799/2746.Decremental String Concatenation/README_EN.md index 3d0bb4d65827f..adbe1918047cd 100644 --- a/solution/2700-2799/2746.Decremental String Concatenation/README_EN.md +++ b/solution/2700-2799/2746.Decremental String Concatenation/README_EN.md @@ -68,15 +68,20 @@ It can be shown that the minimum possible length of str2 is 6. ## Solutions -**Solution 1: Case Discussion** +**Solution 1: Memoization Search** -We observe that the string 'AA' can only be followed by 'BB', and the string 'AB' can be placed at the beginning or end of the string. Therefore: +We notice that when concatenating strings, the first and last characters of the string will affect the length of the concatenated string. Therefore, we design a function $dfs(i, a, b)$, which represents the minimum length of the concatenated string starting from the $i$-th string, and the first character of the previously concatenated string is $a$, and the last character is $b$. -- If $x < y$, we can first alternately place 'BBAABBAA..BB', placing a total of $x$ 'AA' and $x+1$ 'BB', then place the remaining $z$ 'AB', with a total length of $(x \times 2 + z + 1) \times 2$; -- If $x > y$, we can first alternately place 'AABBAABB..AA', placing a total of $y$ 'BB' and $y+1$ 'AA', then place the remaining $z$ 'AB', with a total length of $(y \times 2 + z + 1) \times 2$; -- If $x = y$, we only need to alternately place 'AABB', placing a total of $x$ 'AA' and $y$ 'BB', then place the remaining $z$ 'AB', with a total length of $(x + y + z) \times 2$. +The execution process of the function $dfs(i, a, b)$ is as follows: -The time complexity is $O(1)$, and the space complexity is $O(1)$. +- If $i = n$, it means that all strings have been concatenated, return $0$; +- Otherwise, we consider concatenating the $i$-th string to the end or the beginning of the already concatenated string, and get the lengths $x$ and $y$ of the concatenated string, then $dfs(i, a, b) = \min(x, y) + |words[i]|$. + +To avoid repeated calculations, we use the method of memoization search. Specifically, we use a three-dimensional array $f$ to store all the return values of $dfs(i, a, b)$. When we need to calculate $dfs(i, a, b)$, if $f[i][a][b]$ has been calculated, we directly return $f[i][a][b]$; otherwise, we calculate the value of $dfs(i, a, b)$ according to the above recurrence relation, and store it in $f[i][a][b]$. + +In the main function, we directly return $|words[0]| + dfs(1, words[0][0], words[0][|words[0]| - 1])$. + +The time complexity is $O(n \times C^2)$, and the space complexity is $O(n \times C^2)$. Where $C$ represents the maximum length of the string. diff --git a/solution/3000-3099/3004.Maximum Subtree of the Same Color/README.md b/solution/3000-3099/3004.Maximum Subtree of the Same Color/README.md index bae54cf1d4945..6f122900f1a73 100644 --- a/solution/3000-3099/3004.Maximum Subtree of the Same Color/README.md +++ b/solution/3000-3099/3004.Maximum Subtree of the Same Color/README.md @@ -15,7 +15,7 @@

Return the size of such subtree with the maximum number of nodes possible.

 

-

+

Example 1:

@@ -33,7 +33,7 @@ Explanation: The whole tree has the same color, and the subtree rooted at node 0 has the most number of nodes which is 4. Hence, we return 4. -

+

Example 3:

diff --git a/solution/3000-3099/3004.Maximum Subtree of the Same Color/README_EN.md b/solution/3000-3099/3004.Maximum Subtree of the Same Color/README_EN.md index 12025da2b1868..f40af99b1621d 100644 --- a/solution/3000-3099/3004.Maximum Subtree of the Same Color/README_EN.md +++ b/solution/3000-3099/3004.Maximum Subtree of the Same Color/README_EN.md @@ -13,7 +13,7 @@

Return the size of such subtree with the maximum number of nodes possible.

 

-

+

Example 1:

@@ -31,7 +31,7 @@ Explanation: The whole tree has the same color, and the subtree rooted at node 0 has the most number of nodes which is 4. Hence, we return 4. -

+

Example 3:

diff --git a/solution/3000-3099/3004.Maximum Subtree of the Same Color/images/20231216-134017.png b/solution/3000-3099/3004.Maximum Subtree of the Same Color/images/20231216-134017.png new file mode 100644 index 0000000000000000000000000000000000000000..baba124725ad556d4e3c0e8fa345e57e8ca3cce1 GIT binary patch literal 24579 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 z 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 Date: Fri, 12 Jan 2024 09:14:51 +0800 Subject: [PATCH 2/3] feat: add solutions to lc problem: No.2085 (#2209) No.2085.Count Common Words With One Occurrence --- .../README.md | 71 ++++++++++++------ .../README_EN.md | 73 +++++++++++++------ .../Solution.cpp | 12 ++- .../Solution.go | 9 +-- .../Solution.java | 22 +++--- .../Solution.py | 2 +- .../Solution.ts | 17 +++++ 7 files changed, 141 insertions(+), 65 deletions(-) create mode 100644 solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.ts diff --git a/solution/2000-2099/2085.Count Common Words With One Occurrence/README.md b/solution/2000-2099/2085.Count Common Words With One Occurrence/README.md index 87fefb3279a72..6803e9dc5b365 100644 --- a/solution/2000-2099/2085.Count Common Words With One Occurrence/README.md +++ b/solution/2000-2099/2085.Count Common Words With One Occurrence/README.md @@ -53,9 +53,9 @@ -**方法一:哈希表** +**方法一:哈希表计数** -我们可以用两个哈希表分别统计两个字符串数组中每个字符串出现的次数,然后遍历其中一个哈希表,如果某个字符串在另一个哈希表中出现了一次,且在当前哈希表中也出现了一次,则答案加一。 +我们可以用两个哈希表 $cnt1$ 和 $cnt2$ 分别统计两个字符串数组中每个字符串出现的次数,然后遍历其中一个哈希表,如果某个字符串在另一个哈希表中出现了一次,且在当前哈希表中也出现了一次,则答案加一。 时间复杂度 $O(n + m)$,空间复杂度 $O(n + m)$。其中 $n$ 和 $m$ 分别是两个字符串数组的长度。 @@ -70,7 +70,7 @@ class Solution: def countWords(self, words1: List[str], words2: List[str]) -> int: cnt1 = Counter(words1) cnt2 = Counter(words2) - return sum(cnt2[k] == 1 for k, v in cnt1.items() if v == 1) + return sum(v == 1 and cnt2[w] == 1 for w, v in cnt1.items()) ``` ### **Java** @@ -80,24 +80,22 @@ class Solution: ```java class Solution { public int countWords(String[] words1, String[] words2) { - Map cnt1 = count(words1); - Map cnt2 = count(words2); + Map cnt1 = new HashMap<>(); + Map cnt2 = new HashMap<>(); + for (var w : words1) { + cnt1.merge(w, 1, Integer::sum); + } + for (var w : words2) { + cnt2.merge(w, 1, Integer::sum); + } int ans = 0; - for (String w : words1) { - if (cnt1.getOrDefault(w, 0) == 1 && cnt2.getOrDefault(w, 0) == 1) { + for (var e : cnt1.entrySet()) { + if (e.getValue() == 1 && cnt2.getOrDefault(e.getKey(), 0) == 1) { ++ans; } } return ans; } - - private Map count(String[] words) { - Map cnt = new HashMap<>(); - for (String w : words) { - cnt.put(w, cnt.getOrDefault(w, 0) + 1); - } - return cnt; - } } ``` @@ -109,10 +107,16 @@ public: int countWords(vector& words1, vector& words2) { unordered_map cnt1; unordered_map cnt2; - for (auto& w : words1) cnt1[w]++; - for (auto& w : words2) cnt2[w]++; + for (auto& w : words1) { + ++cnt1[w]; + } + for (auto& w : words2) { + ++cnt2[w]; + } int ans = 0; - for (auto& w : words1) ans += (cnt1[w] == 1 && cnt2[w] == 1); + for (auto& [w, v] : cnt1) { + ans += v == 1 && cnt2[w] == 1; + } return ans; } }; @@ -121,7 +125,7 @@ public: ### **Go** ```go -func countWords(words1 []string, words2 []string) int { +func countWords(words1 []string, words2 []string) (ans int) { cnt1 := map[string]int{} cnt2 := map[string]int{} for _, w := range words1 { @@ -130,13 +134,34 @@ func countWords(words1 []string, words2 []string) int { for _, w := range words2 { cnt2[w]++ } - ans := 0 - for _, w := range words1 { - if cnt1[w] == 1 && cnt2[w] == 1 { + for w, v := range cnt1 { + if v == 1 && cnt2[w] == 1 { ans++ } } - return ans + return +} +``` + +### **TypeScript** + +```ts +function countWords(words1: string[], words2: string[]): number { + const cnt1 = new Map(); + const cnt2 = new Map(); + for (const w of words1) { + cnt1.set(w, (cnt1.get(w) ?? 0) + 1); + } + for (const w of words2) { + cnt2.set(w, (cnt2.get(w) ?? 0) + 1); + } + let ans = 0; + for (const [w, v] of cnt1) { + if (v === 1 && cnt2.get(w) === 1) { + ++ans; + } + } + return ans; } ``` diff --git a/solution/2000-2099/2085.Count Common Words With One Occurrence/README_EN.md b/solution/2000-2099/2085.Count Common Words With One Occurrence/README_EN.md index 8c00227000d18..010e07460e322 100644 --- a/solution/2000-2099/2085.Count Common Words With One Occurrence/README_EN.md +++ b/solution/2000-2099/2085.Count Common Words With One Occurrence/README_EN.md @@ -47,6 +47,12 @@ Thus, there are 2 strings that appear exactly once in each of the two arrays. ## Solutions +**Solution 1: Hash Table + Counting** + +We can use two hash tables, $cnt1$ and $cnt2$, to count the occurrences of each string in the two string arrays respectively. Then, we traverse one of the hash tables. If a string appears once in the other hash table and also appears once in the current hash table, we increment the answer by one. + +The time complexity is $O(n + m)$, and the space complexity is $O(n + m)$. Where $n$ and $m$ are the lengths of the two string arrays respectively. + ### **Python3** @@ -56,7 +62,7 @@ class Solution: def countWords(self, words1: List[str], words2: List[str]) -> int: cnt1 = Counter(words1) cnt2 = Counter(words2) - return sum(cnt2[k] == 1 for k, v in cnt1.items() if v == 1) + return sum(v == 1 and cnt2[w] == 1 for w, v in cnt1.items()) ``` ### **Java** @@ -64,24 +70,22 @@ class Solution: ```java class Solution { public int countWords(String[] words1, String[] words2) { - Map cnt1 = count(words1); - Map cnt2 = count(words2); + Map cnt1 = new HashMap<>(); + Map cnt2 = new HashMap<>(); + for (var w : words1) { + cnt1.merge(w, 1, Integer::sum); + } + for (var w : words2) { + cnt2.merge(w, 1, Integer::sum); + } int ans = 0; - for (String w : words1) { - if (cnt1.getOrDefault(w, 0) == 1 && cnt2.getOrDefault(w, 0) == 1) { + for (var e : cnt1.entrySet()) { + if (e.getValue() == 1 && cnt2.getOrDefault(e.getKey(), 0) == 1) { ++ans; } } return ans; } - - private Map count(String[] words) { - Map cnt = new HashMap<>(); - for (String w : words) { - cnt.put(w, cnt.getOrDefault(w, 0) + 1); - } - return cnt; - } } ``` @@ -93,10 +97,16 @@ public: int countWords(vector& words1, vector& words2) { unordered_map cnt1; unordered_map cnt2; - for (auto& w : words1) cnt1[w]++; - for (auto& w : words2) cnt2[w]++; + for (auto& w : words1) { + ++cnt1[w]; + } + for (auto& w : words2) { + ++cnt2[w]; + } int ans = 0; - for (auto& w : words1) ans += (cnt1[w] == 1 && cnt2[w] == 1); + for (auto& [w, v] : cnt1) { + ans += v == 1 && cnt2[w] == 1; + } return ans; } }; @@ -105,7 +115,7 @@ public: ### **Go** ```go -func countWords(words1 []string, words2 []string) int { +func countWords(words1 []string, words2 []string) (ans int) { cnt1 := map[string]int{} cnt2 := map[string]int{} for _, w := range words1 { @@ -114,13 +124,34 @@ func countWords(words1 []string, words2 []string) int { for _, w := range words2 { cnt2[w]++ } - ans := 0 - for _, w := range words1 { - if cnt1[w] == 1 && cnt2[w] == 1 { + for w, v := range cnt1 { + if v == 1 && cnt2[w] == 1 { ans++ } } - return ans + return +} +``` + +### **TypeScript** + +```ts +function countWords(words1: string[], words2: string[]): number { + const cnt1 = new Map(); + const cnt2 = new Map(); + for (const w of words1) { + cnt1.set(w, (cnt1.get(w) ?? 0) + 1); + } + for (const w of words2) { + cnt2.set(w, (cnt2.get(w) ?? 0) + 1); + } + let ans = 0; + for (const [w, v] of cnt1) { + if (v === 1 && cnt2.get(w) === 1) { + ++ans; + } + } + return ans; } ``` diff --git a/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.cpp b/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.cpp index 80f99b6d1e348..a8f931c5a47e9 100644 --- a/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.cpp +++ b/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.cpp @@ -3,10 +3,16 @@ class Solution { int countWords(vector& words1, vector& words2) { unordered_map cnt1; unordered_map cnt2; - for (auto& w : words1) cnt1[w]++; - for (auto& w : words2) cnt2[w]++; + for (auto& w : words1) { + ++cnt1[w]; + } + for (auto& w : words2) { + ++cnt2[w]; + } int ans = 0; - for (auto& w : words1) ans += (cnt1[w] == 1 && cnt2[w] == 1); + for (auto& [w, v] : cnt1) { + ans += v == 1 && cnt2[w] == 1; + } return ans; } }; \ No newline at end of file diff --git a/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.go b/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.go index 4944125081a4a..abe50fe466a8a 100644 --- a/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.go +++ b/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.go @@ -1,4 +1,4 @@ -func countWords(words1 []string, words2 []string) int { +func countWords(words1 []string, words2 []string) (ans int) { cnt1 := map[string]int{} cnt2 := map[string]int{} for _, w := range words1 { @@ -7,11 +7,10 @@ func countWords(words1 []string, words2 []string) int { for _, w := range words2 { cnt2[w]++ } - ans := 0 - for _, w := range words1 { - if cnt1[w] == 1 && cnt2[w] == 1 { + for w, v := range cnt1 { + if v == 1 && cnt2[w] == 1 { ans++ } } - return ans + return } \ No newline at end of file diff --git a/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.java b/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.java index 8b2557df393af..5da266de10127 100644 --- a/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.java +++ b/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.java @@ -1,21 +1,19 @@ class Solution { public int countWords(String[] words1, String[] words2) { - Map cnt1 = count(words1); - Map cnt2 = count(words2); + Map cnt1 = new HashMap<>(); + Map cnt2 = new HashMap<>(); + for (var w : words1) { + cnt1.merge(w, 1, Integer::sum); + } + for (var w : words2) { + cnt2.merge(w, 1, Integer::sum); + } int ans = 0; - for (String w : words1) { - if (cnt1.getOrDefault(w, 0) == 1 && cnt2.getOrDefault(w, 0) == 1) { + for (var e : cnt1.entrySet()) { + if (e.getValue() == 1 && cnt2.getOrDefault(e.getKey(), 0) == 1) { ++ans; } } return ans; } - - private Map count(String[] words) { - Map cnt = new HashMap<>(); - for (String w : words) { - cnt.put(w, cnt.getOrDefault(w, 0) + 1); - } - return cnt; - } } \ No newline at end of file diff --git a/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.py b/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.py index 4fe15942faa54..49f27a8e282c5 100644 --- a/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.py +++ b/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.py @@ -2,4 +2,4 @@ class Solution: def countWords(self, words1: List[str], words2: List[str]) -> int: cnt1 = Counter(words1) cnt2 = Counter(words2) - return sum(cnt2[k] == 1 for k, v in cnt1.items() if v == 1) + return sum(v == 1 and cnt2[w] == 1 for w, v in cnt1.items()) diff --git a/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.ts b/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.ts new file mode 100644 index 0000000000000..a7c19ca0e3899 --- /dev/null +++ b/solution/2000-2099/2085.Count Common Words With One Occurrence/Solution.ts @@ -0,0 +1,17 @@ +function countWords(words1: string[], words2: string[]): number { + const cnt1 = new Map(); + const cnt2 = new Map(); + for (const w of words1) { + cnt1.set(w, (cnt1.get(w) ?? 0) + 1); + } + for (const w of words2) { + cnt2.set(w, (cnt2.get(w) ?? 0) + 1); + } + let ans = 0; + for (const [w, v] of cnt1) { + if (v === 1 && cnt2.get(w) === 1) { + ++ans; + } + } + return ans; +} From 6815131ac39e151b61312af25e78fd7bc38b82f0 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Fri, 12 Jan 2024 16:52:52 +0800 Subject: [PATCH 3/3] fix: update code blocks (#2210) --- .../README.md | 35 ++----------------- .../README_EN.md | 35 ++----------------- .../Solution.ts | 31 ---------------- .../2612.Minimum Reverse Operations/README.md | 35 ++----------------- .../README_EN.md | 35 ++----------------- 5 files changed, 8 insertions(+), 163 deletions(-) diff --git a/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/README.md b/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/README.md index 18a09a5ca7acf..8233faf7d68d6 100644 --- a/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/README.md +++ b/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/README.md @@ -165,7 +165,7 @@ func longestSubarray(nums []int, limit int) (ans int) { ### **TypeScript** -````ts +```ts function longestSubarray(nums: number[], limit: number): number { const ts = new TreapMultiSet(); let ans = 0; @@ -281,37 +281,6 @@ class TreapMultiSet implements ITreapMultiSet { private readonly leftBound: T; private readonly rightBound: T; - /** - * - * @param compareFn A compare function which returns boolean or number - * @param leftBound defalut value is `-Infinity` - * @param rightBound defalut value is `Infinity` - * @description - * create a `MultiSet`, compare elements using `compareFn`, which is increasing order by default. - * @example - * ```ts - * interface Person { - name: string - age: number - } - - const leftBound = { - name: 'Alice', - age: -Infinity, - } - - const rightBound = { - name: 'Bob', - age: Infinity, - } - - const sortedList = new TreapMultiSet( - (a: Person, b: Person) => a.age - b.age, - leftBound, - rightBound - ) - * ``` - */ constructor(compareFn?: CompareFunction); constructor(compareFn: CompareFunction, leftBound: T, rightBound: T); constructor( @@ -828,7 +797,7 @@ class TreapMultiSet implements ITreapMultiSet { yield* this.reverseInOrder(root.left); } } -```` +``` ### **...** diff --git a/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/README_EN.md b/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/README_EN.md index 02a25f7d2c509..cccd86cf2450f 100644 --- a/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/README_EN.md +++ b/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/README_EN.md @@ -150,7 +150,7 @@ func longestSubarray(nums []int, limit int) (ans int) { ### **TypeScript** -````ts +```ts function longestSubarray(nums: number[], limit: number): number { const ts = new TreapMultiSet(); let ans = 0; @@ -266,37 +266,6 @@ class TreapMultiSet implements ITreapMultiSet { private readonly leftBound: T; private readonly rightBound: T; - /** - * - * @param compareFn A compare function which returns boolean or number - * @param leftBound defalut value is `-Infinity` - * @param rightBound defalut value is `Infinity` - * @description - * create a `MultiSet`, compare elements using `compareFn`, which is increasing order by default. - * @example - * ```ts - * interface Person { - name: string - age: number - } - - const leftBound = { - name: 'Alice', - age: -Infinity, - } - - const rightBound = { - name: 'Bob', - age: Infinity, - } - - const sortedList = new TreapMultiSet( - (a: Person, b: Person) => a.age - b.age, - leftBound, - rightBound - ) - * ``` - */ constructor(compareFn?: CompareFunction); constructor(compareFn: CompareFunction, leftBound: T, rightBound: T); constructor( @@ -813,7 +782,7 @@ class TreapMultiSet implements ITreapMultiSet { yield* this.reverseInOrder(root.left); } } -```` +``` ### **...** diff --git a/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/Solution.ts b/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/Solution.ts index d800e6e9cbeea..e334426da3ffb 100644 --- a/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/Solution.ts +++ b/solution/1400-1499/1438.Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit/Solution.ts @@ -113,37 +113,6 @@ class TreapMultiSet implements ITreapMultiSet { private readonly leftBound: T; private readonly rightBound: T; - /** - * - * @param compareFn A compare function which returns boolean or number - * @param leftBound defalut value is `-Infinity` - * @param rightBound defalut value is `Infinity` - * @description - * create a `MultiSet`, compare elements using `compareFn`, which is increasing order by default. - * @example - * ```ts - * interface Person { - name: string - age: number - } - - const leftBound = { - name: 'Alice', - age: -Infinity, - } - - const rightBound = { - name: 'Bob', - age: Infinity, - } - - const sortedList = new TreapMultiSet( - (a: Person, b: Person) => a.age - b.age, - leftBound, - rightBound - ) - * ``` - */ constructor(compareFn?: CompareFunction); constructor(compareFn: CompareFunction, leftBound: T, rightBound: T); constructor( diff --git a/solution/2600-2699/2612.Minimum Reverse Operations/README.md b/solution/2600-2699/2612.Minimum Reverse Operations/README.md index 90ccdf565879a..cfb538715242a 100644 --- a/solution/2600-2699/2612.Minimum Reverse Operations/README.md +++ b/solution/2600-2699/2612.Minimum Reverse Operations/README.md @@ -916,7 +916,7 @@ class TreeMultiSet { } ``` -````ts +```ts function minReverseOperations(n: number, p: number, banned: number[], k: number): number[] { const ans = new Array(n).fill(-1); const ts = new Array(2).fill(0).map(() => new TreapMultiSet()); @@ -1049,37 +1049,6 @@ class TreapMultiSet implements ITreapMultiSet { private readonly leftBound: T; private readonly rightBound: T; - /** - * - * @param compareFn A compare function which returns boolean or number - * @param leftBound defalut value is `-Infinity` - * @param rightBound defalut value is `Infinity` - * @description - * create a `MultiSet`, compare elements using `compareFn`, which is increasing order by default. - * @example - * ```ts - * interface Person { - name: string - age: number - } - - const leftBound = { - name: 'Alice', - age: -Infinity, - } - - const rightBound = { - name: 'Bob', - age: Infinity, - } - - const sortedList = new TreapMultiSet( - (a: Person, b: Person) => a.age - b.age, - leftBound, - rightBound - ) - * ``` - */ constructor(compareFn?: CompareFunction); constructor(compareFn: CompareFunction, leftBound: T, rightBound: T); constructor( @@ -1596,7 +1565,7 @@ class TreapMultiSet implements ITreapMultiSet { yield* this.reverseInOrder(root.left); } } -```` +``` ### **...** diff --git a/solution/2600-2699/2612.Minimum Reverse Operations/README_EN.md b/solution/2600-2699/2612.Minimum Reverse Operations/README_EN.md index 351acd7f18dc2..22b600b3b3f2c 100644 --- a/solution/2600-2699/2612.Minimum Reverse Operations/README_EN.md +++ b/solution/2600-2699/2612.Minimum Reverse Operations/README_EN.md @@ -902,7 +902,7 @@ class TreeMultiSet { } ``` -````ts +```ts function minReverseOperations(n: number, p: number, banned: number[], k: number): number[] { const ans = new Array(n).fill(-1); const ts = new Array(2).fill(0).map(() => new TreapMultiSet()); @@ -1035,37 +1035,6 @@ class TreapMultiSet implements ITreapMultiSet { private readonly leftBound: T; private readonly rightBound: T; - /** - * - * @param compareFn A compare function which returns boolean or number - * @param leftBound defalut value is `-Infinity` - * @param rightBound defalut value is `Infinity` - * @description - * create a `MultiSet`, compare elements using `compareFn`, which is increasing order by default. - * @example - * ```ts - * interface Person { - name: string - age: number - } - - const leftBound = { - name: 'Alice', - age: -Infinity, - } - - const rightBound = { - name: 'Bob', - age: Infinity, - } - - const sortedList = new TreapMultiSet( - (a: Person, b: Person) => a.age - b.age, - leftBound, - rightBound - ) - * ``` - */ constructor(compareFn?: CompareFunction); constructor(compareFn: CompareFunction, leftBound: T, rightBound: T); constructor( @@ -1582,7 +1551,7 @@ class TreapMultiSet implements ITreapMultiSet { yield* this.reverseInOrder(root.left); } } -```` +``` ### **...**