From f6a1b6df26a64d9ef0ece9f381aa79ce737986f3 Mon Sep 17 00:00:00 2001 From: li-chx Date: Tue, 22 Jul 2025 21:59:38 +0800 Subject: [PATCH] =?UTF-8?q?1695.=20=E5=88=A0=E9=99=A4=E5=AD=90=E6=95=B0?= =?UTF-8?q?=E7=BB=84=E7=9A=84=E6=9C=80=E5=A4=A7=E5=BE=97=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) 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); }