From 3af3726811129c8257fdd0e53c80b99d3763f2b6 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Mon, 20 Jan 2025 09:52:42 +0800 Subject: [PATCH 1/2] feat: add solutions to lc problems: No.2221,2233 --- .../0500-0599/0554.Brick Wall/images/a.png | Bin 0 -> 85723 bytes .../README.md | 49 ++++++---- .../README_EN.md | 49 ++++++---- .../Solution.cpp | 11 ++- .../Solution.go | 9 +- .../Solution.java | 9 +- .../Solution.py | 7 +- .../Solution.ts | 8 ++ .../README.md | 89 ++++++++++------- .../README_EN.md | 91 +++++++++++------- .../Solution.cpp | 24 +++-- .../Solution.go | 6 +- .../Solution.java | 17 ++-- .../Solution.js | 18 ++-- .../Solution.py | 7 +- .../Solution.ts | 14 +++ .../README.md | 12 +-- .../README_EN.md | 14 ++- .../README.md | 2 +- .../README_EN.md | 6 +- .../README_EN.md | 4 +- .../3425.Longest Special Path/README_EN.md | 2 +- .../README_EN.md | 1 - .../README_EN.md | 4 +- .../README_EN.md | 6 +- .../3429.Paint House IV/README_EN.md | 1 - .../README_EN.md | 4 +- solution/CONTEST_README.md | 1 + solution/CONTEST_README_EN.md | 1 + solution/README.md | 1 + solution/README_EN.md | 1 + 31 files changed, 285 insertions(+), 183 deletions(-) create mode 100644 solution/0500-0599/0554.Brick Wall/images/a.png create mode 100644 solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.ts create mode 100644 solution/2200-2299/2233.Maximum Product After K Increments/Solution.ts diff --git a/solution/0500-0599/0554.Brick Wall/images/a.png b/solution/0500-0599/0554.Brick Wall/images/a.png new file mode 100644 index 0000000000000000000000000000000000000000..b6f6e9e15044ed3c583e7e7cd94117807bbf5e72 GIT binary patch literal 85723 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 -### 方法一 +### 方法一:模拟 + +我们可以直接模拟题目描述的操作,对数组 $\textit{nums}$ 进行 $n - 1$ 轮操作,每轮操作都按照题目描述的规则更新数组 $\textit{nums}$。最后返回数组 $\textit{nums}$ 中剩下的唯一元素即可。 + +时间复杂度 $O(n^2)$,其中 $n$ 是数组 $\textit{nums}$ 的长度。空间复杂度 $O(1)$。 @@ -78,10 +82,9 @@ tags: ```python class Solution: def triangularSum(self, nums: List[int]) -> int: - n = len(nums) - for i in range(n, 0, -1): - for j in range(i - 1): - nums[j] = (nums[j] + nums[j + 1]) % 10 + for k in range(len(nums) - 1, 0, -1): + for i in range(k): + nums[i] = (nums[i] + nums[i + 1]) % 10 return nums[0] ``` @@ -90,10 +93,9 @@ class Solution: ```java class Solution { public int triangularSum(int[] nums) { - int n = nums.length; - for (int i = n; i >= 0; --i) { - for (int j = 0; j < i - 1; ++j) { - nums[j] = (nums[j] + nums[j + 1]) % 10; + for (int k = nums.length - 1; k > 0; --k) { + for (int i = 0; i < k; ++i) { + nums[i] = (nums[i] + nums[i + 1]) % 10; } } return nums[0]; @@ -107,10 +109,11 @@ class Solution { class Solution { public: int triangularSum(vector& nums) { - int n = nums.size(); - for (int i = n; i >= 0; --i) - for (int j = 0; j < i - 1; ++j) - nums[j] = (nums[j] + nums[j + 1]) % 10; + for (int k = nums.size() - 1; k; --k) { + for (int i = 0; i < k; ++i) { + nums[i] = (nums[i] + nums[i + 1]) % 10; + } + } return nums[0]; } }; @@ -120,16 +123,28 @@ public: ```go func triangularSum(nums []int) int { - n := len(nums) - for i := n; i >= 0; i-- { - for j := 0; j < i-1; j++ { - nums[j] = (nums[j] + nums[j+1]) % 10 + for k := len(nums) - 1; k > 0; k-- { + for i := 0; i < k; i++ { + nums[i] = (nums[i] + nums[i+1]) % 10 } } return nums[0] } ``` +#### TypeScript + +```ts +function triangularSum(nums: number[]): number { + for (let k = nums.length - 1; k; --k) { + for (let i = 0; i < k; ++i) { + nums[i] = (nums[i] + nums[i + 1]) % 10; + } + } + return nums[0]; +} +``` + diff --git a/solution/2200-2299/2221.Find Triangular Sum of an Array/README_EN.md b/solution/2200-2299/2221.Find Triangular Sum of an Array/README_EN.md index 77103da95bd7d..7af4442da995c 100644 --- a/solution/2200-2299/2221.Find Triangular Sum of an Array/README_EN.md +++ b/solution/2200-2299/2221.Find Triangular Sum of an Array/README_EN.md @@ -65,7 +65,11 @@ Since there is only one element in nums, the triangular sum is the value of that -### Solution 1 +### Solution 1: Simulation + +We can directly simulate the operations described in the problem. Perform $n - 1$ rounds of operations on the array $\textit{nums}$, updating the array $\textit{nums}$ according to the rules described in the problem for each round. Finally, return the only remaining element in the array $\textit{nums}$. + +The time complexity is $O(n^2)$, where $n$ is the length of the array $\textit{nums}$. The space complexity is $O(1)$. @@ -74,10 +78,9 @@ Since there is only one element in nums, the triangular sum is the value of that ```python class Solution: def triangularSum(self, nums: List[int]) -> int: - n = len(nums) - for i in range(n, 0, -1): - for j in range(i - 1): - nums[j] = (nums[j] + nums[j + 1]) % 10 + for k in range(len(nums) - 1, 0, -1): + for i in range(k): + nums[i] = (nums[i] + nums[i + 1]) % 10 return nums[0] ``` @@ -86,10 +89,9 @@ class Solution: ```java class Solution { public int triangularSum(int[] nums) { - int n = nums.length; - for (int i = n; i >= 0; --i) { - for (int j = 0; j < i - 1; ++j) { - nums[j] = (nums[j] + nums[j + 1]) % 10; + for (int k = nums.length - 1; k > 0; --k) { + for (int i = 0; i < k; ++i) { + nums[i] = (nums[i] + nums[i + 1]) % 10; } } return nums[0]; @@ -103,10 +105,11 @@ class Solution { class Solution { public: int triangularSum(vector& nums) { - int n = nums.size(); - for (int i = n; i >= 0; --i) - for (int j = 0; j < i - 1; ++j) - nums[j] = (nums[j] + nums[j + 1]) % 10; + for (int k = nums.size() - 1; k; --k) { + for (int i = 0; i < k; ++i) { + nums[i] = (nums[i] + nums[i + 1]) % 10; + } + } return nums[0]; } }; @@ -116,16 +119,28 @@ public: ```go func triangularSum(nums []int) int { - n := len(nums) - for i := n; i >= 0; i-- { - for j := 0; j < i-1; j++ { - nums[j] = (nums[j] + nums[j+1]) % 10 + for k := len(nums) - 1; k > 0; k-- { + for i := 0; i < k; i++ { + nums[i] = (nums[i] + nums[i+1]) % 10 } } return nums[0] } ``` +#### TypeScript + +```ts +function triangularSum(nums: number[]): number { + for (let k = nums.length - 1; k; --k) { + for (let i = 0; i < k; ++i) { + nums[i] = (nums[i] + nums[i + 1]) % 10; + } + } + return nums[0]; +} +``` + diff --git a/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.cpp b/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.cpp index 44ac097bb2420..504ae15992d34 100644 --- a/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.cpp +++ b/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.cpp @@ -1,10 +1,11 @@ class Solution { public: int triangularSum(vector& nums) { - int n = nums.size(); - for (int i = n; i >= 0; --i) - for (int j = 0; j < i - 1; ++j) - nums[j] = (nums[j] + nums[j + 1]) % 10; + for (int k = nums.size() - 1; k; --k) { + for (int i = 0; i < k; ++i) { + nums[i] = (nums[i] + nums[i + 1]) % 10; + } + } return nums[0]; } -}; \ No newline at end of file +}; diff --git a/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.go b/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.go index 85db7978ed236..5d381ecca9768 100644 --- a/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.go +++ b/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.go @@ -1,9 +1,8 @@ func triangularSum(nums []int) int { - n := len(nums) - for i := n; i >= 0; i-- { - for j := 0; j < i-1; j++ { - nums[j] = (nums[j] + nums[j+1]) % 10 + for k := len(nums) - 1; k > 0; k-- { + for i := 0; i < k; i++ { + nums[i] = (nums[i] + nums[i+1]) % 10 } } return nums[0] -} \ No newline at end of file +} diff --git a/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.java b/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.java index aaf52d63cecc7..442201ef96c3f 100644 --- a/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.java +++ b/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.java @@ -1,11 +1,10 @@ class Solution { public int triangularSum(int[] nums) { - int n = nums.length; - for (int i = n; i >= 0; --i) { - for (int j = 0; j < i - 1; ++j) { - nums[j] = (nums[j] + nums[j + 1]) % 10; + for (int k = nums.length - 1; k > 0; --k) { + for (int i = 0; i < k; ++i) { + nums[i] = (nums[i] + nums[i + 1]) % 10; } } return nums[0]; } -} \ No newline at end of file +} diff --git a/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.py b/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.py index ed6981b63e65e..f537232457da9 100644 --- a/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.py +++ b/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.py @@ -1,7 +1,6 @@ class Solution: def triangularSum(self, nums: List[int]) -> int: - n = len(nums) - for i in range(n, 0, -1): - for j in range(i - 1): - nums[j] = (nums[j] + nums[j + 1]) % 10 + for k in range(len(nums) - 1, 0, -1): + for i in range(k): + nums[i] = (nums[i] + nums[i + 1]) % 10 return nums[0] diff --git a/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.ts b/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.ts new file mode 100644 index 0000000000000..5e00f234db5d3 --- /dev/null +++ b/solution/2200-2299/2221.Find Triangular Sum of an Array/Solution.ts @@ -0,0 +1,8 @@ +function triangularSum(nums: number[]): number { + for (let k = nums.length - 1; k; --k) { + for (let i = 0; i < k; ++i) { + nums[i] = (nums[i] + nums[i + 1]) % 10; + } + } + return nums[0]; +} diff --git a/solution/2200-2299/2233.Maximum Product After K Increments/README.md b/solution/2200-2299/2233.Maximum Product After K Increments/README.md index a4152a059f5d7..43af0295bdd7b 100644 --- a/solution/2200-2299/2233.Maximum Product After K Increments/README.md +++ b/solution/2200-2299/2233.Maximum Product After K Increments/README.md @@ -63,9 +63,9 @@ tags: ### 方法一:贪心 + 优先队列(小根堆) -每次操作,贪心地选择最小的元素进行加 $1$,共进行 $k$ 次操作。最后累乘所有元素得到结果。注意取模操作。 +根据题目描述,要使得乘积最大,我们需要尽量增大较小的数,因此我们可以使用小根堆来维护数组 $\textit{nums}$。每次从小根堆中取出最小的数,将其增加 $1$,然后重新放回小根堆中。重复这个过程 $k$ 次后,我们将当前小根堆中的所有数相乘,即可得到答案。 -时间复杂度 $O(n+klogn)$。其中,$n$ 表示 $nums$ 的长度。建堆的时间复杂度为 $O(n)$,每次弹出最小元素进行加 $1$,再放回堆中,时间复杂度为 $O(logn)$,共进行 $k$ 次操作。 +时间复杂度 $O(k \times \log n)$,空间复杂度 $O(n)$。其中 $n$ 是数组 $\textit{nums}$ 的长度。 @@ -76,31 +76,27 @@ class Solution: def maximumProduct(self, nums: List[int], k: int) -> int: heapify(nums) for _ in range(k): - heappush(nums, heappop(nums) + 1) - ans = 1 + heapreplace(nums, nums[0] + 1) mod = 10**9 + 7 - for v in nums: - ans = (ans * v) % mod - return ans + return reduce(lambda x, y: x * y % mod, nums) ``` #### Java ```java class Solution { - private static final int MOD = (int) 1e9 + 7; - public int maximumProduct(int[] nums, int k) { - PriorityQueue q = new PriorityQueue<>(); - for (int v : nums) { - q.offer(v); + PriorityQueue pq = new PriorityQueue<>(); + for (int x : nums) { + pq.offer(x); } while (k-- > 0) { - q.offer(q.poll() + 1); + pq.offer(pq.poll() + 1); } + final int mod = (int) 1e9 + 7; long ans = 1; - while (!q.isEmpty()) { - ans = (ans * q.poll()) % MOD; + for (int x : pq) { + ans = (ans * x) % mod; } return (int) ans; } @@ -113,16 +109,22 @@ class Solution { class Solution { public: int maximumProduct(vector& nums, int k) { - int mod = 1e9 + 7; - make_heap(nums.begin(), nums.end(), greater()); - while (k--) { - pop_heap(nums.begin(), nums.end(), greater()); - ++nums.back(); - push_heap(nums.begin(), nums.end(), greater()); + priority_queue, greater> pq; + for (int x : nums) { + pq.push(x); + } + while (k-- > 0) { + int smallest = pq.top(); + pq.pop(); + pq.push(smallest + 1); } + const int mod = 1e9 + 7; long long ans = 1; - for (int v : nums) ans = (ans * v) % mod; - return ans; + while (!pq.empty()) { + ans = (ans * pq.top()) % mod; + pq.pop(); + } + return static_cast(ans); } }; ``` @@ -137,8 +139,8 @@ func maximumProduct(nums []int, k int) int { heap.Fix(&h, 0) } ans := 1 - for _, v := range nums { - ans = (ans * v) % (1e9 + 7) + for _, x := range nums { + ans = (ans * x) % (1e9 + 7) } return ans } @@ -149,6 +151,25 @@ func (hp) Push(any) {} func (hp) Pop() (_ any) { return } ``` +#### TypeScript + +```ts +function maximumProduct(nums: number[], k: number): number { + const pq = new MinPriorityQueue(); + nums.forEach(x => pq.enqueue(x)); + while (k--) { + const x = pq.dequeue().element; + pq.enqueue(x + 1); + } + let ans = 1; + const mod = 10 ** 9 + 7; + while (!pq.isEmpty()) { + ans = (ans * pq.dequeue().element) % mod; + } + return ans; +} +``` + #### JavaScript ```js @@ -158,18 +179,16 @@ func (hp) Pop() (_ any) { return } * @return {number} */ var maximumProduct = function (nums, k) { - const n = nums.length; - let pq = new MinPriorityQueue(); - for (let i = 0; i < n; i++) { - pq.enqueue(nums[i]); - } - for (let i = 0; i < k; i++) { - pq.enqueue(pq.dequeue().element + 1); + const pq = new MinPriorityQueue(); + nums.forEach(x => pq.enqueue(x)); + while (k--) { + const x = pq.dequeue().element; + pq.enqueue(x + 1); } let ans = 1; - const limit = 10 ** 9 + 7; - for (let i = 0; i < n; i++) { - ans = (ans * pq.dequeue().element) % limit; + const mod = 10 ** 9 + 7; + while (!pq.isEmpty()) { + ans = (ans * pq.dequeue().element) % mod; } return ans; }; diff --git a/solution/2200-2299/2233.Maximum Product After K Increments/README_EN.md b/solution/2200-2299/2233.Maximum Product After K Increments/README_EN.md index d695ef8547689..c9d2532880d38 100644 --- a/solution/2200-2299/2233.Maximum Product After K Increments/README_EN.md +++ b/solution/2200-2299/2233.Maximum Product After K Increments/README_EN.md @@ -61,7 +61,11 @@ Note that there may be other ways to increment nums to have the maximum product. -### Solution 1 +### Solution 1: Greedy + Priority Queue (Min-Heap) + +According to the problem description, to maximize the product, we need to increase the smaller numbers as much as possible. Therefore, we can use a min-heap to maintain the array $\textit{nums}$. Each time, we take the smallest number from the min-heap, increase it by $1$, and then put it back into the min-heap. After repeating this process $k$ times, we multiply all the numbers currently in the min-heap to get the answer. + +The time complexity is $O(k \times \log n)$, and the space complexity is $O(n)$. Here, $n$ is the length of the array $\textit{nums}$. @@ -72,31 +76,27 @@ class Solution: def maximumProduct(self, nums: List[int], k: int) -> int: heapify(nums) for _ in range(k): - heappush(nums, heappop(nums) + 1) - ans = 1 + heapreplace(nums, nums[0] + 1) mod = 10**9 + 7 - for v in nums: - ans = (ans * v) % mod - return ans + return reduce(lambda x, y: x * y % mod, nums) ``` #### Java ```java class Solution { - private static final int MOD = (int) 1e9 + 7; - public int maximumProduct(int[] nums, int k) { - PriorityQueue q = new PriorityQueue<>(); - for (int v : nums) { - q.offer(v); + PriorityQueue pq = new PriorityQueue<>(); + for (int x : nums) { + pq.offer(x); } while (k-- > 0) { - q.offer(q.poll() + 1); + pq.offer(pq.poll() + 1); } + final int mod = (int) 1e9 + 7; long ans = 1; - while (!q.isEmpty()) { - ans = (ans * q.poll()) % MOD; + for (int x : pq) { + ans = (ans * x) % mod; } return (int) ans; } @@ -109,16 +109,22 @@ class Solution { class Solution { public: int maximumProduct(vector& nums, int k) { - int mod = 1e9 + 7; - make_heap(nums.begin(), nums.end(), greater()); - while (k--) { - pop_heap(nums.begin(), nums.end(), greater()); - ++nums.back(); - push_heap(nums.begin(), nums.end(), greater()); + priority_queue, greater> pq; + for (int x : nums) { + pq.push(x); + } + while (k-- > 0) { + int smallest = pq.top(); + pq.pop(); + pq.push(smallest + 1); } + const int mod = 1e9 + 7; long long ans = 1; - for (int v : nums) ans = (ans * v) % mod; - return ans; + while (!pq.empty()) { + ans = (ans * pq.top()) % mod; + pq.pop(); + } + return static_cast(ans); } }; ``` @@ -133,8 +139,8 @@ func maximumProduct(nums []int, k int) int { heap.Fix(&h, 0) } ans := 1 - for _, v := range nums { - ans = (ans * v) % (1e9 + 7) + for _, x := range nums { + ans = (ans * x) % (1e9 + 7) } return ans } @@ -145,6 +151,25 @@ func (hp) Push(any) {} func (hp) Pop() (_ any) { return } ``` +#### TypeScript + +```ts +function maximumProduct(nums: number[], k: number): number { + const pq = new MinPriorityQueue(); + nums.forEach(x => pq.enqueue(x)); + while (k--) { + const x = pq.dequeue().element; + pq.enqueue(x + 1); + } + let ans = 1; + const mod = 10 ** 9 + 7; + while (!pq.isEmpty()) { + ans = (ans * pq.dequeue().element) % mod; + } + return ans; +} +``` + #### JavaScript ```js @@ -154,18 +179,16 @@ func (hp) Pop() (_ any) { return } * @return {number} */ var maximumProduct = function (nums, k) { - const n = nums.length; - let pq = new MinPriorityQueue(); - for (let i = 0; i < n; i++) { - pq.enqueue(nums[i]); - } - for (let i = 0; i < k; i++) { - pq.enqueue(pq.dequeue().element + 1); + const pq = new MinPriorityQueue(); + nums.forEach(x => pq.enqueue(x)); + while (k--) { + const x = pq.dequeue().element; + pq.enqueue(x + 1); } let ans = 1; - const limit = 10 ** 9 + 7; - for (let i = 0; i < n; i++) { - ans = (ans * pq.dequeue().element) % limit; + const mod = 10 ** 9 + 7; + while (!pq.isEmpty()) { + ans = (ans * pq.dequeue().element) % mod; } return ans; }; diff --git a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.cpp b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.cpp index 19ed3988b54aa..612e8152a88b9 100644 --- a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.cpp +++ b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.cpp @@ -1,15 +1,21 @@ class Solution { public: int maximumProduct(vector& nums, int k) { - int mod = 1e9 + 7; - make_heap(nums.begin(), nums.end(), greater()); - while (k--) { - pop_heap(nums.begin(), nums.end(), greater()); - ++nums.back(); - push_heap(nums.begin(), nums.end(), greater()); + priority_queue, greater> pq; + for (int x : nums) { + pq.push(x); } + while (k-- > 0) { + int smallest = pq.top(); + pq.pop(); + pq.push(smallest + 1); + } + const int mod = 1e9 + 7; long long ans = 1; - for (int v : nums) ans = (ans * v) % mod; - return ans; + while (!pq.empty()) { + ans = (ans * pq.top()) % mod; + pq.pop(); + } + return static_cast(ans); } -}; \ No newline at end of file +}; diff --git a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.go b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.go index 916e86c9c3ce5..c545f2ac10b2b 100644 --- a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.go +++ b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.go @@ -5,8 +5,8 @@ func maximumProduct(nums []int, k int) int { heap.Fix(&h, 0) } ans := 1 - for _, v := range nums { - ans = (ans * v) % (1e9 + 7) + for _, x := range nums { + ans = (ans * x) % (1e9 + 7) } return ans } @@ -14,4 +14,4 @@ func maximumProduct(nums []int, k int) int { type hp struct{ sort.IntSlice } func (hp) Push(any) {} -func (hp) Pop() (_ any) { return } \ No newline at end of file +func (hp) Pop() (_ any) { return } diff --git a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.java b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.java index 6d1a1ceafeb5a..f910d83dc4091 100644 --- a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.java +++ b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.java @@ -1,18 +1,17 @@ class Solution { - private static final int MOD = (int) 1e9 + 7; - public int maximumProduct(int[] nums, int k) { - PriorityQueue q = new PriorityQueue<>(); - for (int v : nums) { - q.offer(v); + PriorityQueue pq = new PriorityQueue<>(); + for (int x : nums) { + pq.offer(x); } while (k-- > 0) { - q.offer(q.poll() + 1); + pq.offer(pq.poll() + 1); } + final int mod = (int) 1e9 + 7; long ans = 1; - while (!q.isEmpty()) { - ans = (ans * q.poll()) % MOD; + for (int x : pq) { + ans = (ans * x) % mod; } return (int) ans; } -} \ No newline at end of file +} diff --git a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.js b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.js index 8a58d8218f157..7db69848cc4c3 100644 --- a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.js +++ b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.js @@ -4,18 +4,16 @@ * @return {number} */ var maximumProduct = function (nums, k) { - const n = nums.length; - let pq = new MinPriorityQueue(); - for (let i = 0; i < n; i++) { - pq.enqueue(nums[i]); - } - for (let i = 0; i < k; i++) { - pq.enqueue(pq.dequeue().element + 1); + const pq = new MinPriorityQueue(); + nums.forEach(x => pq.enqueue(x)); + while (k--) { + const x = pq.dequeue().element; + pq.enqueue(x + 1); } let ans = 1; - const limit = 10 ** 9 + 7; - for (let i = 0; i < n; i++) { - ans = (ans * pq.dequeue().element) % limit; + const mod = 10 ** 9 + 7; + while (!pq.isEmpty()) { + ans = (ans * pq.dequeue().element) % mod; } return ans; }; diff --git a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.py b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.py index 24efcf9f1da00..028d3020cec8c 100644 --- a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.py +++ b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.py @@ -2,9 +2,6 @@ class Solution: def maximumProduct(self, nums: List[int], k: int) -> int: heapify(nums) for _ in range(k): - heappush(nums, heappop(nums) + 1) - ans = 1 + heapreplace(nums, nums[0] + 1) mod = 10**9 + 7 - for v in nums: - ans = (ans * v) % mod - return ans + return reduce(lambda x, y: x * y % mod, nums) diff --git a/solution/2200-2299/2233.Maximum Product After K Increments/Solution.ts b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.ts new file mode 100644 index 0000000000000..914f20e9a81a4 --- /dev/null +++ b/solution/2200-2299/2233.Maximum Product After K Increments/Solution.ts @@ -0,0 +1,14 @@ +function maximumProduct(nums: number[], k: number): number { + const pq = new MinPriorityQueue(); + nums.forEach(x => pq.enqueue(x)); + while (k--) { + const x = pq.dequeue().element; + pq.enqueue(x + 1); + } + let ans = 1; + const mod = 10 ** 9 + 7; + while (!pq.isEmpty()) { + ans = (ans * pq.dequeue().element) % mod; + } + return ans; +} diff --git a/solution/2200-2299/2234.Maximum Total Beauty of the Gardens/README.md b/solution/2200-2299/2234.Maximum Total Beauty of the Gardens/README.md index 04cdcc1b200f1..8270b4ec1a5d3 100644 --- a/solution/2200-2299/2234.Maximum Total Beauty of the Gardens/README.md +++ b/solution/2200-2299/2234.Maximum Total Beauty of the Gardens/README.md @@ -89,17 +89,17 @@ tags: ### 方法一:枚举 + 二分查找 -我们注意到,如果一个花园中种的花的数目已经大于等于 $target$,那么这个花园就已经是完善的花园,不能再改变。而不完善的花园中,可以通过种更多的花来使得这个花园变成完善的花园。 +我们注意到,如果一个花园中种的花的数目已经大于等于 $\textit{target}$,那么这个花园就已经是完善的花园,不能再改变。而不完善的花园中,可以通过种更多的花来使得这个花园变成完善的花园。 -我们不妨枚举有多少个花园最终成为完善的花园,假设初始时有 $x$ 个完善的花园,那么我们可以在 $[x, n]$ 范围内枚举。我们应该选择哪些不完善花园变成完善花园呢?实际上,我们应该选择那么花的数目较多的花园,这样才能使得最终剩下的可额外种植的花更多,将这些花用于提升不完善花园的最小值。因此,我们对数组 $flowers$ 进行排序。 +我们不妨枚举有多少个花园最终成为完善的花园,假设初始时有 $x$ 个完善的花园,那么我们可以在 $[x, n]$ 范围内枚举。我们应该选择哪些不完善花园变成完善花园呢?实际上,我们应该选择那么花的数目较多的花园,这样才能使得最终剩下的可额外种植的花更多,将这些花用于提升不完善花园的最小值。因此,我们对数组 $\textit{flowers}$ 进行排序。 -接下来,我们枚举完善花园的数目 $x$,那么当前要变成完善花园的是 $target[n-x]$,需要种植的花的数量为 $\max(0, target - flowers[n - x])$。 +接下来,我们枚举完善花园的数目 $x$,那么当前要变成完善花园的是 $\textit{target}[n-x]$,需要种植的花的数量为 $\max(0, \textit{target} - \textit{flowers}[n - x])$。 -我们更新剩余可种植的花 $newFlowers$,如果小于 $0$,说明已经不能将更多的花园变成完善花园了,直接退出枚举。 +我们更新剩余可种植的花 $\textit{newFlowers}$,如果小于 $0$,说明已经不能将更多的花园变成完善花园了,直接退出枚举。 -否则,我们在 $[0,..n-x-1]$ 范围内,二分查找可以把不完善花园变成完善花园的最大下标。记下标为 $l$,那么所需要种植的花的数量为 $cost = flowers[l] * (l + 1) - s[l + 1]$,其中 $s[i]$ 是 $flowers$ 数组中前 $i$ 个数之和。如果此时还能提升最小值的大小,我们算出能提升的幅度 $\frac{newFlowers - cost}{l + 1}$,并且保证最终的最小值不超过 $target-1$。即最小值 $y = \min(flowers[l] + \frac{newFlowers - cost}{l + 1}, target - 1)$。那么此时花园的美丽值为 $x \times full + y \times partial$。答案为所有美丽值的最大值。 +否则,我们在 $[0,..n-x-1]$ 范围内,二分查找可以把不完善花园变成完善花园的最大下标。记下标为 $l$,那么所需要种植的花的数量为 $\textit{cost} = \textit{flowers}[l] \times (l + 1) - s[l + 1]$,其中 $s[i]$ 是 $\textit{flowers}$ 数组中前 $i$ 个数之和。如果此时还能提升最小值的大小,我们算出能提升的幅度 $\frac{\textit{newFlowers} - \textit{cost}}{l + 1}$,并且保证最终的最小值不超过 $\textit{target}-1$。即最小值 $y = \min(\textit{flowers}[l] + \frac{\textit{newFlowers} - \textit{cost}}{l + 1}, \textit{target} - 1)$。那么此时花园的美丽值为 $x \times \textit{full} + y \times \textit{partial}$。答案为所有美丽值的最大值。 -时间复杂度 $O(n \times \log n)$,空间复杂度 $O(n)$。其中 $n$ 是数组 $flowers$ 的长度。 +时间复杂度 $O(n \times \log n)$,空间复杂度 $O(n)$。其中 $n$ 是数组 $\textit{flowers}$ 的长度。 diff --git a/solution/2200-2299/2234.Maximum Total Beauty of the Gardens/README_EN.md b/solution/2200-2299/2234.Maximum Total Beauty of the Gardens/README_EN.md index 1ac2b03a66353..c568d1329272f 100644 --- a/solution/2200-2299/2234.Maximum Total Beauty of the Gardens/README_EN.md +++ b/solution/2200-2299/2234.Maximum Total Beauty of the Gardens/README_EN.md @@ -87,7 +87,19 @@ Note that Alice could make all the gardens complete but in this case, she would -### Solution 1 +### Solution 1: Enumeration + Binary Search + +We note that if the number of flowers in a garden is already greater than or equal to $\textit{target}$, then this garden is already a perfect garden and cannot be changed. For imperfect gardens, we can plant more flowers to make them perfect gardens. + +Let's enumerate how many gardens will eventually become perfect gardens. Suppose initially there are $x$ perfect gardens, then we can enumerate in the range $[x, n]$. Which imperfect gardens should we choose to become perfect gardens? In fact, we should choose the gardens with more flowers so that the remaining flowers can be used to increase the minimum value of the imperfect gardens. Therefore, we sort the array $\textit{flowers}$. + +Next, we enumerate the number of perfect gardens $x$. The current garden to become a perfect garden is $\textit{target}[n-x]$, and the number of flowers needed is $\max(0, \textit{target} - \textit{flowers}[n - x])$. + +We update the remaining flowers $\textit{newFlowers}$. If it is less than $0$, it means we can no longer make more gardens perfect, so we stop the enumeration. + +Otherwise, we perform a binary search in the range $[0,..n-x-1]$ to find the maximum index of the imperfect gardens that can be turned into perfect gardens. Let the index be $l$, then the number of flowers needed is $\textit{cost} = \textit{flowers}[l] \times (l + 1) - s[l + 1]$, where $s[i]$ is the sum of the first $i$ numbers in the $\textit{flowers}$ array. If we can still increase the minimum value, we calculate the increase $\frac{\textit{newFlowers} - \textit{cost}}{l + 1}$, and ensure that the final minimum value does not exceed $\textit{target}-1$. That is, the minimum value $y = \min(\textit{flowers}[l] + \frac{\textit{newFlowers} - \textit{cost}}{l + 1}, \textit{target} - 1)$. Then the beauty value of the garden is $x \times \textit{full} + y \times \textit{partial}$. The answer is the maximum of all beauty values. + +The time complexity is $O(n \times \log n)$, and the space complexity is $O(n)$. Here, $n$ is the length of the $\textit{flowers}$ array. diff --git a/solution/2200-2299/2239.Find Closest Number to Zero/README.md b/solution/2200-2299/2239.Find Closest Number to Zero/README.md index c1711f87b107d..abbfd86520dda 100644 --- a/solution/2200-2299/2239.Find Closest Number to Zero/README.md +++ b/solution/2200-2299/2239.Find Closest Number to Zero/README.md @@ -59,7 +59,7 @@ tags: ### 方法一:一次遍历 -我们定义一个变量 $d$ 来记录当前最小的距离,初始时 $d=\infty$。然后我们遍历数组,对于每个元素 $x$,我们计算 $y=|x|$,如果 $y \lt d$ 或者 $y=d$ 且 $x \gt ans$,我们就更新答案 $ans=x$ 和 $d=y$。 +我们定义一个变量 $\textit{d}$ 来记录当前最小的距离,初始时 $\textit{d}=\infty$。然后我们遍历数组,对于每个元素 $x$,我们计算 $y=|x|$,如果 $y \lt d$ 或者 $y=d$ 且 $x \gt \textit{ans}$,我们就更新答案 $\textit{ans}=x$ 和 $\textit{d}=y$。 遍历结束后返回答案即可。 diff --git a/solution/2200-2299/2239.Find Closest Number to Zero/README_EN.md b/solution/2200-2299/2239.Find Closest Number to Zero/README_EN.md index f6d0021ac4653..c0c0ccf88c3c0 100644 --- a/solution/2200-2299/2239.Find Closest Number to Zero/README_EN.md +++ b/solution/2200-2299/2239.Find Closest Number to Zero/README_EN.md @@ -56,13 +56,13 @@ Thus, the closest number to 0 in the array is 1. -### Solution 1: One Pass +### Solution 1: Single Pass -We define a variable $d$ to record the current minimum distance, initially $d=\infty$. Then we traverse the array, for each element $x$, we calculate $y=|x|$. If $y \lt d$ or $y=d$ and $x \gt ans$, we update the answer $ans=x$ and $d=y$. +We define a variable $\textit{d}$ to record the current minimum distance, initially $\textit{d}=\infty$. Then we traverse the array, for each element $x$, we calculate $y=|x|$. If $y \lt d$ or $y=d$ and $x \gt \textit{ans}$, we update the answer $\textit{ans}=x$ and $\textit{d}=y$. After the traversal, return the answer. -Time complexity is $O(n)$, where $n$ is the length of the array. Space complexity is $O(1)$. +The time complexity is $O(n)$, where $n$ is the length of the array. The space complexity is $O(1)$. diff --git a/solution/3400-3499/3424.Minimum Cost to Make Arrays Identical/README_EN.md b/solution/3400-3499/3424.Minimum Cost to Make Arrays Identical/README_EN.md index fb0c3dc80f5a1..4988df8d5dd61 100644 --- a/solution/3400-3499/3424.Minimum Cost to Make Arrays Identical/README_EN.md +++ b/solution/3400-3499/3424.Minimum Cost to Make Arrays Identical/README_EN.md @@ -17,7 +17,7 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3400-3499/3424.Mi

You are given two integer arrays arr and brr of length n, and an integer k. You can perform the following operations on arr any number of times: