3573. 买卖股票的最佳时机 V
This commit is contained in:
parent
9a82ec82f7
commit
0f8400d0c9
43
src/main.rs
43
src/main.rs
|
|
@ -1,30 +1,31 @@
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
struct Solution;
|
struct Solution;
|
||||||
mod arr;
|
mod arr;
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn special_triplets(nums: Vec<i32>) -> i32 {
|
pub fn maximum_profit(prices: Vec<i32>, k: i32) -> i64 {
|
||||||
let mut map: HashMap<i32, i32> = HashMap::new();
|
let k = k as usize;
|
||||||
let mut map2: HashMap<i32, i32> = HashMap::new();
|
// 0 无 1 持有 2 做空
|
||||||
let md = 1e9 as i64 + 7;
|
let mut dp = vec![vec![vec![-0x3f3f3f3f_i64;3];k + 1]; prices.len()];
|
||||||
let mut ans = 0_i64;
|
dp[0][0][0] = 0;
|
||||||
nums.iter().for_each(|x| {
|
for i in 1..=k {
|
||||||
map.insert(*x, map.get(&x).copied().unwrap_or(0) + 1);
|
dp[0][i][0] = 0;
|
||||||
});
|
dp[0][i][1] = -prices[0] as i64;
|
||||||
map2.insert(nums[0], 1);
|
dp[0][i][2] = prices[0] as i64;
|
||||||
for i in 1..nums.len() - 1 {
|
|
||||||
let mp2d = map2.get(&(nums[i] * 2)).copied().unwrap_or(0) as i64;
|
|
||||||
let mut mp1d = map.get(&(nums[i] * 2)).copied().unwrap_or(0) as i64 - mp2d;
|
|
||||||
if nums[i] == nums[i] * 2 {
|
|
||||||
mp1d -= 1;
|
|
||||||
}
|
|
||||||
ans = (ans + mp1d * mp2d) % md;
|
|
||||||
map2.insert(nums[i], map2.get(&nums[i]).copied().unwrap_or(0) + 1);
|
|
||||||
}
|
}
|
||||||
ans as i32
|
for i in 1..prices.len() {
|
||||||
|
dp[i][0][1] = dp[i-1][0][1];
|
||||||
|
dp[i][0][2] = dp[i-1][0][2];
|
||||||
|
dp[i][0][0] = dp[i-1][0][0].max(dp[i-1][0][1] + prices[i] as i64).max(dp[i-1][0][2] - prices[i] as i64);
|
||||||
|
for j in 1..=k {
|
||||||
|
dp[i][j][0] = dp[i-1][j][0].max(dp[i-1][j][1] + prices[i] as i64).max(dp[i-1][j][2] - prices[i] as i64);
|
||||||
|
dp[i][j][1] = dp[i-1][j][1].max(dp[i-1][j-1][0] - prices[i] as i64);
|
||||||
|
dp[i][j][2] = dp[i-1][j][2].max(dp[i-1][j-1][0] + prices[i] as i64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{:?}",dp);
|
||||||
|
dp.last().unwrap().last().unwrap()[0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn main() {
|
fn main() {
|
||||||
let result = Solution::special_triplets(vec![0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
|
let result = Solution::maximum_profit(vec![5,10,9], 1);
|
||||||
println!("{:?}", result);
|
println!("{:?}", result);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue