3487. 删除后的最大子数组元素和

This commit is contained in:
li-chx 2025-07-25 15:01:48 +08:00
parent f6a1b6df26
commit 0af11c087d
1 changed files with 14 additions and 33 deletions

View File

@ -1,44 +1,25 @@
use std::cmp::max;
use std::collections::HashMap;
struct Solution;
impl Solution {
pub fn maximum_unique_subarray(nums: Vec<i32>) -> i32 {
let mut map: HashMap<i32, usize> = HashMap::new();
let mut ans = 0;
for i in 0..nums.len() {
if map.contains_key(&nums[i]) {
let l = i - map.len();
let r = i;
let mut temp = 0;
let mut j = l;
while j < r {
temp += nums[j];
j+=1;
pub fn max_sum(mut nums: Vec<i32>) -> i32 {
nums.sort_by(|a,b| b.cmp(a));
let mut last = nums[0];
let mut ans = nums[0];
for i in 1..nums.len() {
let t = nums[i];
if t <= 0 {
break
}
ans = max(ans, temp);
j = l;
while nums[j] != nums[i] {
map.remove(&nums[j]);
j += 1;
if t == last {
continue;
}
map.insert(nums[i], i);
last = t;
ans += t;
}
else {
map.insert(nums[i], i);
}
}
let mut temp = 0;
let mut j = nums.len() - map.len();
while j < nums.len() {
temp += nums[j];
j += 1;
}
max(ans, temp)
ans
}
}
fn main() {
let sl = Solution::maximum_unique_subarray(vec![4,2,4,5,6]);
let sl = Solution::max_sum(vec![-1,-2]);
println!("{}", sl);
}