@@ -180,4 +180,90 @@ function maxEnergyBoost(energyDrinkA: number[], energyDrinkB: number[]): number
180
180
181
181
<!-- solution: end -->
182
182
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
+
183
269
<!-- problem: end -->
0 commit comments