Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit bc9bb96

Browse files
feat: add solutions to lc problem: No.2178 (doocs#3986)
No.2178.Maximum Split of Positive Even Integers
1 parent db26b5f commit bc9bb96

File tree

5 files changed

+94
-18
lines changed

5 files changed

+94
-18
lines changed

‎solution/2100-2199/2178.Maximum Split of Positive Even Integers/README.md‎

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ tags:
7575

7676
### 方法一:贪心
7777

78-
如果 $finalSum$ 是奇数,那么无法拆分成若干个互不相同的正偶数之和,直接返回空数组。
78+
如果 $\textit{finalSum}$ 是奇数,那么无法拆分成若干个互不相同的正偶数之和,直接返回空数组。
7979

80-
否则,我们可以贪心地按照 2,ドル 4, 6, \cdots$ 的顺序拆分 $finalSum,ドル直到 $finalSum$ 无法再拆分出一个不同的正偶数为止,此时我们将剩余的 $finalSum$ 加到最后一个正偶数上即可。
80+
否则,我们可以贪心地按照 2,ドル 4, 6, \cdots$ 的顺序拆分 $\textit{finalSum},ドル直到 $\textit{finalSum}$ 无法再拆分出一个不同的正偶数为止,此时我们将剩余的 $\textit{finalSum}$ 加到最后一个正偶数上即可。
8181

82-
时间复杂度 $O(\sqrt{finalSum}),ドル忽略答案数组的空间消耗,空间复杂度 $O(1)$。
82+
时间复杂度 $O(\sqrt{\textit{finalSum}}),ドル忽略答案数组的空间消耗,空间复杂度 $O(1)$。
8383

8484
<!-- tabs:start -->
8585

@@ -88,13 +88,13 @@ tags:
8888
```python
8989
class Solution:
9090
def maximumEvenSplit(self, finalSum: int) -> List[int]:
91-
if finalSum %2:
91+
if finalSum &1:
9292
return []
93-
i = 2
9493
ans = []
94+
i = 2
9595
while i <= finalSum:
96-
ans.append(i)
9796
finalSum -= i
97+
ans.append(i)
9898
i += 2
9999
ans[-1] += finalSum
100100
return ans
@@ -126,7 +126,9 @@ class Solution {
126126
public:
127127
vector<long long> maximumEvenSplit(long long finalSum) {
128128
vector<long long> ans;
129-
if (finalSum % 2) return ans;
129+
if (finalSum % 2) {
130+
return ans;
131+
}
130132
for (long long i = 2; i <= finalSum; i += 2) {
131133
ans.push_back(i);
132134
finalSum -= i;
@@ -170,6 +172,29 @@ function maximumEvenSplit(finalSum: number): number[] {
170172
}
171173
```
172174

175+
#### Rust
176+
177+
```rust
178+
impl Solution {
179+
pub fn maximum_even_split(mut final_sum: i64) -> Vec<i64> {
180+
let mut ans = Vec::new();
181+
if final_sum % 2 != 0 {
182+
return ans;
183+
}
184+
let mut i = 2;
185+
while i <= final_sum {
186+
ans.push(i);
187+
final_sum -= i;
188+
i += 2;
189+
}
190+
if let Some(last) = ans.last_mut() {
191+
*last += final_sum;
192+
}
193+
ans
194+
}
195+
}
196+
```
197+
173198
#### C#
174199

175200
```cs

‎solution/2100-2199/2178.Maximum Split of Positive Even Integers/README_EN.md‎

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ Thus, we return an empty array.
5353
<pre>
5454
<strong>Input:</strong> finalSum = 28
5555
<strong>Output:</strong> [6,8,2,12]
56-
<strong>Explanation:</strong> The following are valid splits: <code>(2 + 26)</code>, <code>(6 + 8 + 2 + 12)</code>, and <code>(4 + 24)</code>.
56+
<strong>Explanation:</strong> The following are valid splits: <code>(2 + 26)</code>, <code>(6 + 8 + 2 + 12)</code>, and <code>(4 + 24)</code>.
5757
<code>(6 + 8 + 2 + 12)</code> has the maximum number of integers, which is 4. Thus, we return [6,8,2,12].
5858
Note that [10,2,4,12], [6,2,4,16], etc. are also accepted.
5959
</pre>
@@ -71,7 +71,13 @@ Note that [10,2,4,12], [6,2,4,16], etc. are also accepted.
7171

7272
<!-- solution:start -->
7373

74-
### Solution 1
74+
### Solution 1: Greedy
75+
76+
If $\textit{finalSum}$ is odd, it cannot be split into the sum of several distinct positive even integers, so we directly return an empty array.
77+
78+
Otherwise, we can greedily split $\textit{finalSum}$ in the order of 2,ドル 4, 6, \cdots,ドル until $\textit{finalSum}$ can no longer be split into a different positive even integer. At this point, we add the remaining $\textit{finalSum}$ to the last positive even integer.
79+
80+
The time complexity is $O(\sqrt{\textit{finalSum}}),ドル and ignoring the space consumption of the answer array, the space complexity is $O(1)$.
7581

7682
<!-- tabs:start -->
7783

@@ -80,13 +86,13 @@ Note that [10,2,4,12], [6,2,4,16], etc. are also accepted.
8086
```python
8187
class Solution:
8288
def maximumEvenSplit(self, finalSum: int) -> List[int]:
83-
if finalSum %2:
89+
if finalSum &1:
8490
return []
85-
i = 2
8691
ans = []
92+
i = 2
8793
while i <= finalSum:
88-
ans.append(i)
8994
finalSum -= i
95+
ans.append(i)
9096
i += 2
9197
ans[-1] += finalSum
9298
return ans
@@ -118,7 +124,9 @@ class Solution {
118124
public:
119125
vector<long long> maximumEvenSplit(long long finalSum) {
120126
vector<long long> ans;
121-
if (finalSum % 2) return ans;
127+
if (finalSum % 2) {
128+
return ans;
129+
}
122130
for (long long i = 2; i <= finalSum; i += 2) {
123131
ans.push_back(i);
124132
finalSum -= i;
@@ -162,6 +170,29 @@ function maximumEvenSplit(finalSum: number): number[] {
162170
}
163171
```
164172

173+
#### Rust
174+
175+
```rust
176+
impl Solution {
177+
pub fn maximum_even_split(mut final_sum: i64) -> Vec<i64> {
178+
let mut ans = Vec::new();
179+
if final_sum % 2 != 0 {
180+
return ans;
181+
}
182+
let mut i = 2;
183+
while i <= final_sum {
184+
ans.push(i);
185+
final_sum -= i;
186+
i += 2;
187+
}
188+
if let Some(last) = ans.last_mut() {
189+
*last += final_sum;
190+
}
191+
ans
192+
}
193+
}
194+
```
195+
165196
#### C#
166197

167198
```cs

‎solution/2100-2199/2178.Maximum Split of Positive Even Integers/Solution.cpp‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ class Solution {
22
public:
33
vector<long long> maximumEvenSplit(long long finalSum) {
44
vector<long long> ans;
5-
if (finalSum % 2) return ans;
5+
if (finalSum % 2) {
6+
return ans;
7+
}
68
for (long long i = 2; i <= finalSum; i += 2) {
79
ans.push_back(i);
810
finalSum -= i;
911
}
1012
ans.back() += finalSum;
1113
return ans;
1214
}
13-
};
15+
};
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
class Solution:
22
def maximumEvenSplit(self, finalSum: int) -> List[int]:
3-
if finalSum %2:
3+
if finalSum &1:
44
return []
5-
i = 2
65
ans = []
6+
i = 2
77
while i <= finalSum:
8-
ans.append(i)
98
finalSum -= i
9+
ans.append(i)
1010
i += 2
1111
ans[-1] += finalSum
1212
return ans
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
impl Solution {
2+
pub fn maximum_even_split(mut final_sum: i64) -> Vec<i64> {
3+
let mut ans = Vec::new();
4+
if final_sum % 2 != 0 {
5+
return ans;
6+
}
7+
let mut i = 2;
8+
while i <= final_sum {
9+
ans.push(i);
10+
final_sum -= i;
11+
i += 2;
12+
}
13+
if let Some(last) = ans.last_mut() {
14+
*last += final_sum;
15+
}
16+
ans
17+
}
18+
}

0 commit comments

Comments
(0)

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