Skip to content

Commit 6afff8c

Browse files
authored
feat: add solutions to lc problem: No.3259 (#3433)
No.3259.Maximum Energy Boost From Two Drinks
1 parent 22787b5 commit 6afff8c

File tree

7 files changed

+217
-8
lines changed

7 files changed

+217
-8
lines changed

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

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,32 +68,107 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3200-3299/3259.Ma
6868

6969
<!-- solution:start -->
7070

71-
### 方法一
71+
### 方法一:动态规划
72+
73+
我们定义 $f[i][0]$ 表示在第 $i$ 小时选择能量饮料 A 获得的最大强化能量,定义 $f[i][1]$ 表示在第 $i$ 小时选择能量饮料 B 获得的最大强化能量。初始时 $f[0][0] = \textit{energyDrinkA}[0]$, $f[0][1] = \textit{energyDrinkB}[0]$。答案为 $\max(f[n - 1][0], f[n - 1][1])$。
74+
75+
对于 $i > 0$,我们有以下状态转移方程:
76+
77+
$$
78+
\begin{aligned}
79+
f[i][0] & = \max(f[i - 1][0] + \textit{energyDrinkA}[i], f[i - 1][1]) \\
80+
f[i][1] & = \max(f[i - 1][1] + \textit{energyDrinkB}[i], f[i - 1][0])
81+
\end{aligned}
82+
$$
83+
84+
最后返回 $\max(f[n - 1][0], f[n - 1][1])$ 即可。
85+
86+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为数组的长度。
7287

7388
<!-- tabs:start -->
7489

7590
#### Python3
7691

7792
```python
78-
93+
class Solution:
94+
def maxEnergyBoost(self, energyDrinkA: List[int], energyDrinkB: List[int]) -> int:
95+
n = len(energyDrinkA)
96+
f = [[0] * 2 for _ in range(n)]
97+
f[0][0] = energyDrinkA[0]
98+
f[0][1] = energyDrinkB[0]
99+
for i in range(1, n):
100+
f[i][0] = max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1])
101+
f[i][1] = max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0])
102+
return max(f[n - 1])
79103
```
80104

81105
#### Java
82106

83107
```java
84-
108+
class Solution {
109+
public long maxEnergyBoost(int[] energyDrinkA, int[] energyDrinkB) {
110+
int n = energyDrinkA.length;
111+
long[][] f = new long[n][2];
112+
f[0][0] = energyDrinkA[0];
113+
f[0][1] = energyDrinkB[0];
114+
for (int i = 1; i < n; ++i) {
115+
f[i][0] = Math.max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1]);
116+
f[i][1] = Math.max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0]);
117+
}
118+
return Math.max(f[n - 1][0], f[n - 1][1]);
119+
}
120+
}
85121
```
86122

87123
#### C++
88124

89125
```cpp
90-
126+
class Solution {
127+
public:
128+
long long maxEnergyBoost(vector<int>& energyDrinkA, vector<int>& energyDrinkB) {
129+
int n = energyDrinkA.size();
130+
vector<vector<long long>> f(n, vector<long long>(2));
131+
f[0][0] = energyDrinkA[0];
132+
f[0][1] = energyDrinkB[0];
133+
for (int i = 1; i < n; ++i) {
134+
f[i][0] = max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1]);
135+
f[i][1] = max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0]);
136+
}
137+
return max(f[n - 1][0], f[n - 1][1]);
138+
}
139+
};
91140
```
92141
93142
#### Go
94143
95144
```go
145+
func maxEnergyBoost(energyDrinkA []int, energyDrinkB []int) int64 {
146+
n := len(energyDrinkA)
147+
f := make([][2]int64, n)
148+
f[0][0] = int64(energyDrinkA[0])
149+
f[0][1] = int64(energyDrinkB[0])
150+
for i := 1; i < n; i++ {
151+
f[i][0] = max(f[i-1][0]+int64(energyDrinkA[i]), f[i-1][1])
152+
f[i][1] = max(f[i-1][1]+int64(energyDrinkB[i]), f[i-1][0])
153+
}
154+
return max(f[n-1][0], f[n-1][1])
155+
}
156+
```
96157

158+
#### TypeScript
159+
160+
```ts
161+
function maxEnergyBoost(energyDrinkA: number[], energyDrinkB: number[]): number {
162+
const n = energyDrinkA.length;
163+
const f: number[][] = Array.from({ length: n }, () => [0, 0]);
164+
f[0][0] = energyDrinkA[0];
165+
f[0][1] = energyDrinkB[0];
166+
for (let i = 1; i < n; i++) {
167+
f[i][0] = Math.max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1]);
168+
f[i][1] = Math.max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0]);
169+
}
170+
return Math.max(...f[n - 1]!);
171+
}
97172
```
98173

99174
<!-- tabs:end -->

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

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,32 +68,107 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3200-3299/3259.Ma
6868

6969
<!-- solution:start -->
7070

71-
### Solution 1
71+
### Solution 1: Dynamic Programming
72+
73+
We define $f[i][0]$ to represent the maximum boost energy obtained by choosing energy drink A at the $i$-th hour, and $f[i][1]$ to represent the maximum boost energy obtained by choosing energy drink B at the $i$-th hour. Initially, $f[0][0] = \textit{energyDrinkA}[0]$, $f[0][1] = \textit{energyDrinkB}[0]$. The answer is $\max(f[n - 1][0], f[n - 1][1])$.
74+
75+
For $i > 0$, we have the following state transition equations:
76+
77+
$$
78+
\begin{aligned}
79+
f[i][0] & = \max(f[i - 1][0] + \textit{energyDrinkA}[i], f[i - 1][1]) \\
80+
f[i][1] & = \max(f[i - 1][1] + \textit{energyDrinkB}[i], f[i - 1][0])
81+
\end{aligned}
82+
$$
83+
84+
Finally, return $\max(f[n - 1][0], f[n - 1][1])$.
85+
86+
The time complexity is $O(n)$, and the space complexity is $O(n)$. Here, $n$ is the length of the array.
7287

7388
<!-- tabs:start -->
7489

7590
#### Python3
7691

7792
```python
78-
93+
class Solution:
94+
def maxEnergyBoost(self, energyDrinkA: List[int], energyDrinkB: List[int]) -> int:
95+
n = len(energyDrinkA)
96+
f = [[0] * 2 for _ in range(n)]
97+
f[0][0] = energyDrinkA[0]
98+
f[0][1] = energyDrinkB[0]
99+
for i in range(1, n):
100+
f[i][0] = max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1])
101+
f[i][1] = max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0])
102+
return max(f[n - 1])
79103
```
80104

81105
#### Java
82106

83107
```java
84-
108+
class Solution {
109+
public long maxEnergyBoost(int[] energyDrinkA, int[] energyDrinkB) {
110+
int n = energyDrinkA.length;
111+
long[][] f = new long[n][2];
112+
f[0][0] = energyDrinkA[0];
113+
f[0][1] = energyDrinkB[0];
114+
for (int i = 1; i < n; ++i) {
115+
f[i][0] = Math.max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1]);
116+
f[i][1] = Math.max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0]);
117+
}
118+
return Math.max(f[n - 1][0], f[n - 1][1]);
119+
}
120+
}
85121
```
86122

87123
#### C++
88124

89125
```cpp
90-
126+
class Solution {
127+
public:
128+
long long maxEnergyBoost(vector<int>& energyDrinkA, vector<int>& energyDrinkB) {
129+
int n = energyDrinkA.size();
130+
vector<vector<long long>> f(n, vector<long long>(2));
131+
f[0][0] = energyDrinkA[0];
132+
f[0][1] = energyDrinkB[0];
133+
for (int i = 1; i < n; ++i) {
134+
f[i][0] = max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1]);
135+
f[i][1] = max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0]);
136+
}
137+
return max(f[n - 1][0], f[n - 1][1]);
138+
}
139+
};
91140
```
92141
93142
#### Go
94143
95144
```go
145+
func maxEnergyBoost(energyDrinkA []int, energyDrinkB []int) int64 {
146+
n := len(energyDrinkA)
147+
f := make([][2]int64, n)
148+
f[0][0] = int64(energyDrinkA[0])
149+
f[0][1] = int64(energyDrinkB[0])
150+
for i := 1; i < n; i++ {
151+
f[i][0] = max(f[i-1][0]+int64(energyDrinkA[i]), f[i-1][1])
152+
f[i][1] = max(f[i-1][1]+int64(energyDrinkB[i]), f[i-1][0])
153+
}
154+
return max(f[n-1][0], f[n-1][1])
155+
}
156+
```
96157

158+
#### TypeScript
159+
160+
```ts
161+
function maxEnergyBoost(energyDrinkA: number[], energyDrinkB: number[]): number {
162+
const n = energyDrinkA.length;
163+
const f: number[][] = Array.from({ length: n }, () => [0, 0]);
164+
f[0][0] = energyDrinkA[0];
165+
f[0][1] = energyDrinkB[0];
166+
for (let i = 1; i < n; i++) {
167+
f[i][0] = Math.max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1]);
168+
f[i][1] = Math.max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0]);
169+
}
170+
return Math.max(...f[n - 1]!);
171+
}
97172
```
98173

99174
<!-- tabs:end -->
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public:
3+
long long maxEnergyBoost(vector<int>& energyDrinkA, vector<int>& energyDrinkB) {
4+
int n = energyDrinkA.size();
5+
vector<vector<long long>> f(n, vector<long long>(2));
6+
f[0][0] = energyDrinkA[0];
7+
f[0][1] = energyDrinkB[0];
8+
for (int i = 1; i < n; ++i) {
9+
f[i][0] = max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1]);
10+
f[i][1] = max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0]);
11+
}
12+
return max(f[n - 1][0], f[n - 1][1]);
13+
}
14+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
func maxEnergyBoost(energyDrinkA []int, energyDrinkB []int) int64 {
2+
n := len(energyDrinkA)
3+
f := make([][2]int64, n)
4+
f[0][0] = int64(energyDrinkA[0])
5+
f[0][1] = int64(energyDrinkB[0])
6+
for i := 1; i < n; i++ {
7+
f[i][0] = max(f[i-1][0]+int64(energyDrinkA[i]), f[i-1][1])
8+
f[i][1] = max(f[i-1][1]+int64(energyDrinkB[i]), f[i-1][0])
9+
}
10+
return max(f[n-1][0], f[n-1][1])
11+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public long maxEnergyBoost(int[] energyDrinkA, int[] energyDrinkB) {
3+
int n = energyDrinkA.length;
4+
long[][] f = new long[n][2];
5+
f[0][0] = energyDrinkA[0];
6+
f[0][1] = energyDrinkB[0];
7+
for (int i = 1; i < n; ++i) {
8+
f[i][0] = Math.max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1]);
9+
f[i][1] = Math.max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0]);
10+
}
11+
return Math.max(f[n - 1][0], f[n - 1][1]);
12+
}
13+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def maxEnergyBoost(self, energyDrinkA: List[int], energyDrinkB: List[int]) -> int:
3+
n = len(energyDrinkA)
4+
f = [[0] * 2 for _ in range(n)]
5+
f[0][0] = energyDrinkA[0]
6+
f[0][1] = energyDrinkB[0]
7+
for i in range(1, n):
8+
f[i][0] = max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1])
9+
f[i][1] = max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0])
10+
return max(f[n - 1])
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function maxEnergyBoost(energyDrinkA: number[], energyDrinkB: number[]): number {
2+
const n = energyDrinkA.length;
3+
const f: number[][] = Array.from({ length: n }, () => [0, 0]);
4+
f[0][0] = energyDrinkA[0];
5+
f[0][1] = energyDrinkB[0];
6+
for (let i = 1; i < n; i++) {
7+
f[i][0] = Math.max(f[i - 1][0] + energyDrinkA[i], f[i - 1][1]);
8+
f[i][1] = Math.max(f[i - 1][1] + energyDrinkB[i], f[i - 1][0]);
9+
}
10+
return Math.max(...f[n - 1]!);
11+
}

0 commit comments

Comments
 (0)