3507. 移除最小数对使数组有序 I
This commit is contained in:
parent
0f8400d0c9
commit
7efe4d98bb
53
src/main.rs
53
src/main.rs
|
|
@ -1,31 +1,42 @@
|
||||||
struct Solution;
|
struct Solution;
|
||||||
mod arr;
|
mod arr;
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn maximum_profit(prices: Vec<i32>, k: i32) -> i64 {
|
pub fn minimum_pair_removal(mut nums: Vec<i32>) -> i32 {
|
||||||
let k = k as usize;
|
let mut all_clear = false;
|
||||||
// 0 无 1 持有 2 做空
|
let mut ans = -1;
|
||||||
let mut dp = vec![vec![vec![-0x3f3f3f3f_i64;3];k + 1]; prices.len()];
|
while !all_clear{
|
||||||
dp[0][0][0] = 0;
|
ans += 1;
|
||||||
for i in 1..=k {
|
all_clear = true;
|
||||||
dp[0][i][0] = 0;
|
let (mut index_a, mut index_b)= (0,0);
|
||||||
dp[0][i][1] = -prices[0] as i64;
|
let mut min_sum = 1e9 as i32;
|
||||||
dp[0][i][2] = prices[0] as i64;
|
let mut start = 0;
|
||||||
}
|
let mut last = start;
|
||||||
for i in 1..prices.len() {
|
for i in 0 .. nums.len() {
|
||||||
dp[i][0][1] = dp[i-1][0][1];
|
if nums[i] != -10000001 {
|
||||||
dp[i][0][2] = dp[i-1][0][2];
|
start = i;
|
||||||
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);
|
break;
|
||||||
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);
|
for i in start + 1..nums.len() {
|
||||||
dp.last().unwrap().last().unwrap()[0]
|
if nums[i] == -10000001 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if nums[i] < nums[last] {
|
||||||
|
all_clear = false;
|
||||||
|
}
|
||||||
|
if nums[last] + nums[i] < min_sum {
|
||||||
|
(index_a, index_b) = (last, i);
|
||||||
|
min_sum = nums[last] + nums[i];
|
||||||
|
}
|
||||||
|
last = i;
|
||||||
|
}
|
||||||
|
nums[index_a] = min_sum;
|
||||||
|
nums[index_b] = -10000001;
|
||||||
|
}
|
||||||
|
ans
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn main() {
|
fn main() {
|
||||||
let result = Solution::maximum_profit(vec![5,10,9], 1);
|
let result = Solution::minimum_pair_removal(vec![498,107,626,-563,-760,554,-196,-158,185,-63]);
|
||||||
println!("{:?}", result);
|
println!("{:?}", result);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue