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); }