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 faa39e9

Browse files
feat: add solutions to lc problem: No.3259 (doocs#3699)
No.3259.Maximum Energy Boost From Two Drinks
1 parent 813d38b commit faa39e9

File tree

7 files changed

+219
-0
lines changed

7 files changed

+219
-0
lines changed

‎solution/3200-3299/3259.Maximum Energy Boost From Two Drinks/README.md‎

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,90 @@ function maxEnergyBoost(energyDrinkA: number[], energyDrinkB: number[]): number
180180

181181
<!-- solution:end -->
182182

183+
<!-- solution:start -->
184+
185+
### 方法二:动态规划(空间优化)
186+
187+
我们注意到,状态 $f[i]$ 至于 $f[i - 1]$ 有关,而与 $f[i - 2]$ 无关。因此我们可以只使用两个变量 $f$ 和 $g$ 来维护状态,从而将空间复杂度优化到 $O(1)$。
188+
189+
时间复杂度 $O(n),ドル其中 $n$ 为数组的长度。空间复杂度 $O(1)$。
190+
191+
<!-- tabs:start -->
192+
193+
#### Python3
194+
195+
```python
196+
class Solution:
197+
def maxEnergyBoost(self, energyDrinkA: List[int], energyDrinkB: List[int]) -> int:
198+
f, g = energyDrinkA[0], energyDrinkB[0]
199+
for a, b in zip(energyDrinkA[1:], energyDrinkB[1:]):
200+
f, g = max(f + a, g), max(g + b, f)
201+
return max(f, g)
202+
```
203+
204+
#### Java
205+
206+
```java
207+
class Solution {
208+
public long maxEnergyBoost(int[] energyDrinkA, int[] energyDrinkB) {
209+
int n = energyDrinkA.length;
210+
long f = energyDrinkA[0], g = energyDrinkB[0];
211+
for (int i = 1; i < n; ++i) {
212+
long ff = Math.max(f + energyDrinkA[i], g);
213+
g = Math.max(g + energyDrinkB[i], f);
214+
f = ff;
215+
}
216+
return Math.max(f, g);
217+
}
218+
}
219+
```
220+
221+
#### C++
222+
223+
```cpp
224+
class Solution {
225+
public:
226+
long long maxEnergyBoost(vector<int>& energyDrinkA, vector<int>& energyDrinkB) {
227+
int n = energyDrinkA.size();
228+
long long f = energyDrinkA[0], g = energyDrinkB[0];
229+
for (int i = 1; i < n; ++i) {
230+
long long ff = max(f + energyDrinkA[i], g);
231+
g = max(g + energyDrinkB[i], f);
232+
f = ff;
233+
}
234+
return max(f, g);
235+
}
236+
};
237+
```
238+
239+
#### Go
240+
241+
```go
242+
func maxEnergyBoost(energyDrinkA []int, energyDrinkB []int) int64 {
243+
n := len(energyDrinkA)
244+
f, g := energyDrinkA[0], energyDrinkB[0]
245+
for i := 1; i < n; i++ {
246+
f, g = max(f+energyDrinkA[i], g), max(g+energyDrinkB[i], f)
247+
}
248+
return int64(max(f, g))
249+
}
250+
```
251+
252+
#### TypeScript
253+
254+
```ts
255+
function maxEnergyBoost(energyDrinkA: number[], energyDrinkB: number[]): number {
256+
const n = energyDrinkA.length;
257+
let [f, g] = [energyDrinkA[0], energyDrinkB[0]];
258+
for (let i = 1; i < n; ++i) {
259+
[f, g] = [Math.max(f + energyDrinkA[i], g), Math.max(g + energyDrinkB[i], f)];
260+
}
261+
return Math.max(f, g);
262+
}
263+
```
264+
265+
<!-- tabs:end -->
266+
267+
<!-- solution:end -->
268+
183269
<!-- problem:end -->

‎solution/3200-3299/3259.Maximum Energy Boost From Two Drinks/README_EN.md‎

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,90 @@ function maxEnergyBoost(energyDrinkA: number[], energyDrinkB: number[]): number
180180

181181
<!-- solution:end -->
182182

183+
<!-- solution:start -->
184+
185+
### Solution 2: Dynamic Programming (Space Optimization)
186+
187+
We notice that the state $f[i]$ is only related to $f[i - 1]$ and not to $f[i - 2]$. Therefore, we can use only two variables $f$ and $g$ to maintain the state, thus optimizing the space complexity to $O(1)$.
188+
189+
The time complexity is $O(n),ドル where $n$ is the length of the array. The space complexity is $O(1)$.
190+
191+
<!-- tabs:start -->
192+
193+
#### Python3
194+
195+
```python
196+
class Solution:
197+
def maxEnergyBoost(self, energyDrinkA: List[int], energyDrinkB: List[int]) -> int:
198+
f, g = energyDrinkA[0], energyDrinkB[0]
199+
for a, b in zip(energyDrinkA[1:], energyDrinkB[1:]):
200+
f, g = max(f + a, g), max(g + b, f)
201+
return max(f, g)
202+
```
203+
204+
#### Java
205+
206+
```java
207+
class Solution {
208+
public long maxEnergyBoost(int[] energyDrinkA, int[] energyDrinkB) {
209+
int n = energyDrinkA.length;
210+
long f = energyDrinkA[0], g = energyDrinkB[0];
211+
for (int i = 1; i < n; ++i) {
212+
long ff = Math.max(f + energyDrinkA[i], g);
213+
g = Math.max(g + energyDrinkB[i], f);
214+
f = ff;
215+
}
216+
return Math.max(f, g);
217+
}
218+
}
219+
```
220+
221+
#### C++
222+
223+
```cpp
224+
class Solution {
225+
public:
226+
long long maxEnergyBoost(vector<int>& energyDrinkA, vector<int>& energyDrinkB) {
227+
int n = energyDrinkA.size();
228+
long long f = energyDrinkA[0], g = energyDrinkB[0];
229+
for (int i = 1; i < n; ++i) {
230+
long long ff = max(f + energyDrinkA[i], g);
231+
g = max(g + energyDrinkB[i], f);
232+
f = ff;
233+
}
234+
return max(f, g);
235+
}
236+
};
237+
```
238+
239+
#### Go
240+
241+
```go
242+
func maxEnergyBoost(energyDrinkA []int, energyDrinkB []int) int64 {
243+
n := len(energyDrinkA)
244+
f, g := energyDrinkA[0], energyDrinkB[0]
245+
for i := 1; i < n; i++ {
246+
f, g = max(f+energyDrinkA[i], g), max(g+energyDrinkB[i], f)
247+
}
248+
return int64(max(f, g))
249+
}
250+
```
251+
252+
#### TypeScript
253+
254+
```ts
255+
function maxEnergyBoost(energyDrinkA: number[], energyDrinkB: number[]): number {
256+
const n = energyDrinkA.length;
257+
let [f, g] = [energyDrinkA[0], energyDrinkB[0]];
258+
for (let i = 1; i < n; ++i) {
259+
[f, g] = [Math.max(f + energyDrinkA[i], g), Math.max(g + energyDrinkB[i], f)];
260+
}
261+
return Math.max(f, g);
262+
}
263+
```
264+
265+
<!-- tabs:end -->
266+
267+
<!-- solution:end -->
268+
183269
<!-- problem:end -->
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public:
3+
long long maxEnergyBoost(vector<int>& energyDrinkA, vector<int>& energyDrinkB) {
4+
int n = energyDrinkA.size();
5+
long long f = energyDrinkA[0], g = energyDrinkB[0];
6+
for (int i = 1; i < n; ++i) {
7+
long long ff = max(f + energyDrinkA[i], g);
8+
g = max(g + energyDrinkB[i], f);
9+
f = ff;
10+
}
11+
return max(f, g);
12+
}
13+
};
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
func maxEnergyBoost(energyDrinkA []int, energyDrinkB []int) int64 {
2+
n := len(energyDrinkA)
3+
f, g := energyDrinkA[0], energyDrinkB[0]
4+
for i := 1; i < n; i++ {
5+
f, g = max(f+energyDrinkA[i], g), max(g+energyDrinkB[i], f)
6+
}
7+
return int64(max(f, g))
8+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution {
2+
public long maxEnergyBoost(int[] energyDrinkA, int[] energyDrinkB) {
3+
int n = energyDrinkA.length;
4+
long f = energyDrinkA[0], g = energyDrinkB[0];
5+
for (int i = 1; i < n; ++i) {
6+
long ff = Math.max(f + energyDrinkA[i], g);
7+
g = Math.max(g + energyDrinkB[i], f);
8+
f = ff;
9+
}
10+
return Math.max(f, g);
11+
}
12+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Solution:
2+
def maxEnergyBoost(self, energyDrinkA: List[int], energyDrinkB: List[int]) -> int:
3+
f, g = energyDrinkA[0], energyDrinkB[0]
4+
for a, b in zip(energyDrinkA[1:], energyDrinkB[1:]):
5+
f, g = max(f + a, g), max(g + b, f)
6+
return max(f, g)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
function maxEnergyBoost(energyDrinkA: number[], energyDrinkB: number[]): number {
2+
const n = energyDrinkA.length;
3+
let [f, g] = [energyDrinkA[0], energyDrinkB[0]];
4+
for (let i = 1; i < n; ++i) {
5+
[f, g] = [Math.max(f + energyDrinkA[i], g), Math.max(g + energyDrinkB[i], f)];
6+
}
7+
return Math.max(f, g);
8+
}

0 commit comments

Comments
(0)

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