diff --git a/src/main.rs b/src/main.rs index 6b60f9a..ae12f24 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,28 +1,44 @@ use std::cmp::max; +use std::collections::HashMap; struct Solution; impl Solution { - pub fn count_days(mut days: i32, mut meetings: Vec>) -> i32 { - meetings.sort_by(|a, b| a[0].cmp(&b[0])); + pub fn maximum_unique_subarray(nums: Vec) -> i32 { + let mut map: HashMap = HashMap::new(); let mut ans = 0; - let mut last_end = 1; - for c in meetings.iter() { - if last_end >= c[0] { - last_end = max(last_end, c[1] + 1); - continue; + 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); + } + else { + map.insert(nums[i], i); } - ans += c[0] - last_end; - last_end = c[1] + 1; } - days += 1; - if days > last_end { - ans += days - last_end; + let mut temp = 0; + let mut j = nums.len() - map.len(); + while j < nums.len() { + temp += nums[j]; + j += 1; } - ans + max(ans, temp) } } fn main() { - let sl = Solution::count_days(10, vec![vec![5, 7], vec![1, 3], vec![9, 10]]); + let sl = Solution::maximum_unique_subarray(vec![4,2,4,5,6]); println!("{}", sl); }