3487. 删除后的最大子数组元素和
This commit is contained in:
parent
f6a1b6df26
commit
0af11c087d
47
src/main.rs
47
src/main.rs
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue