diff --git a/src/main.rs b/src/main.rs index 07993f1..8f2863c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,31 +1,42 @@ struct Solution; mod arr; impl Solution { - pub fn maximum_profit(prices: Vec, k: i32) -> i64 { - let k = k as usize; - // 0 无 1 持有 2 做空 - let mut dp = vec![vec![vec![-0x3f3f3f3f_i64;3];k + 1]; prices.len()]; - dp[0][0][0] = 0; - for i in 1..=k { - dp[0][i][0] = 0; - dp[0][i][1] = -prices[0] as i64; - dp[0][i][2] = prices[0] as i64; - } - 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); + pub fn minimum_pair_removal(mut nums: Vec) -> i32 { + let mut all_clear = false; + let mut ans = -1; + while !all_clear{ + ans += 1; + all_clear = true; + let (mut index_a, mut index_b)= (0,0); + let mut min_sum = 1e9 as i32; + let mut start = 0; + let mut last = start; + for i in 0 .. nums.len() { + if nums[i] != -10000001 { + start = i; + break; + } } + for i in start + 1..nums.len() { + 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; } - println!("{:?}",dp); - dp.last().unwrap().last().unwrap()[0] + ans } } 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); }