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 e5ab214

Browse files
Merge branch 'master' of github.com:jinbudaily/leetcode-master
合并远程代码
2 parents 28b5878 + f90e8a2 commit e5ab214

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed

‎problems/0123.买卖股票的最佳时机III.md‎

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,52 @@ function maxProfit(prices: number[]): number {
413413
};
414414
```
415415

416+
Rust:
416417

418+
> 版本一
419+
420+
```rust
421+
impl Solution {
422+
pub fn max_profit(prices: Vec<i32>) -> i32 {
423+
/*
424+
* 定义 5 种状态:
425+
* 0: 没有操作, 1: 第一次买入, 2: 第一次卖出, 3: 第二次买入, 4: 第二次卖出
426+
*/
427+
let mut dp = vec![vec![0; 5]; prices.len()];
428+
dp[0][1] = -prices[0];
429+
dp[0][3] = -prices[0];
430+
431+
for (i, &p) in prices.iter().enumerate().skip(1) {
432+
// 不操作
433+
// dp[i][0] = dp[i - 1][0];
434+
dp[i][1] = dp[i - 1][1].max(-p);
435+
dp[i][2] = dp[i - 1][2].max(dp[i - 1][1] + p);
436+
dp[i][3] = dp[i - 1][3].max(dp[i - 1][2] - p);
437+
dp[i][4] = dp[i - 1][4].max(dp[i - 1][3] + p);
438+
}
439+
440+
dp[prices.len() - 1][4]
441+
}
442+
}
443+
```
444+
445+
> 版本二(绕)
446+
447+
```rust
448+
impl Solution {
449+
pub fn max_profit(prices: Vec<i32>) -> i32 {
450+
let (mut one_buy, mut one_sale, mut two_buy, mut two_sale) = (-prices[0], 0, -prices[0], 0);
451+
452+
for p in prices {
453+
one_buy = one_buy.max(-p);
454+
one_sale = one_sale.max(p + one_buy);
455+
two_buy = two_buy.max(one_sale - p);
456+
two_sale = two_sale.max(two_buy + p);
457+
}
458+
two_sale
459+
}
460+
}
461+
```
417462

418463

419464
<p align="center">

‎problems/0188.买卖股票的最佳时机IV.md‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,55 @@ function maxProfit(k: number, prices: number[]): number {
474474
};
475475
```
476476

477+
Rust:
478+
479+
```rust
480+
impl Solution {
481+
pub fn max_profit(k: i32, prices: Vec<i32>) -> i32 {
482+
let mut dp = vec![vec![0; 2 * k as usize + 1]; prices.len()];
483+
484+
for v in dp[0].iter_mut().skip(1).step_by(2) {
485+
*v = -prices[0];
486+
}
487+
488+
for (i, &p) in prices.iter().enumerate().skip(1) {
489+
for j in (0..2 * k as usize - 1).step_by(2) {
490+
dp[i][j + 1] = dp[i - 1][j + 1].max(dp[i - 1][j] - p);
491+
dp[i][j + 2] = dp[i - 1][j + 2].max(dp[i - 1][j + 1] + p);
492+
}
493+
}
494+
495+
dp[prices.len() - 1][2 * k as usize]
496+
}
497+
}
498+
```
499+
500+
空间优化:
501+
502+
```rust
503+
impl Solution {
504+
pub fn max_profit(k: i32, prices: Vec<i32>) -> i32 {
505+
let mut dp = vec![0; 2 * k as usize + 1];
506+
for v in dp.iter_mut().skip(1).step_by(2) {
507+
*v = -prices[0];
508+
}
509+
510+
for p in prices {
511+
for i in 1..=2 * k as usize {
512+
if i % 2 == 1 {
513+
// 买入
514+
dp[i] = dp[i].max(dp[i - 1] - p);
515+
continue;
516+
}
517+
// 卖出
518+
dp[i] = dp[i].max(dp[i - 1] + p);
519+
}
520+
}
521+
522+
dp[2 * k as usize]
523+
}
524+
}
525+
```
477526

478527

479528
<p align="center">

0 commit comments

Comments
(0)

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