From 0af11c087de637fce5073bff545cfaeed9741f5c Mon Sep 17 00:00:00 2001 From: li-chx Date: Fri, 25 Jul 2025 15:01:48 +0800 Subject: [PATCH] =?UTF-8?q?3487.=20=E5=88=A0=E9=99=A4=E5=90=8E=E7=9A=84?= =?UTF-8?q?=E6=9C=80=E5=A4=A7=E5=AD=90=E6=95=B0=E7=BB=84=E5=85=83=E7=B4=A0?= =?UTF-8?q?=E5=92=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 47 ++++++++++++++--------------------------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/src/main.rs b/src/main.rs index ae12f24..905189c 100644 --- a/src/main.rs +++ b/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 { - let mut map: HashMap = 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; - } - ans = max(ans, temp); - j = l; - while nums[j] != nums[i] { - map.remove(&nums[j]); - j += 1; - } - map.insert(nums[i], i); + pub fn max_sum(mut nums: Vec) -> 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 } - else { - map.insert(nums[i], i); + if t == last { + continue; } + last = t; + ans += t; } - 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); }