文章目录
- 题目描述
- 题解思路
- 题解代码
- 题目链接
题目描述

题解思路
我们遍历长度为k的窗口,用一个哈希表记录窗口内的所有元素(用来对窗口内元素去重),我们取哈希表中元素数量大于等于m的窗口总和的最大值
题解代码
use std::collections::HashMap;
impl Solution {
pub fn max_sum(nums: Vec<i32>, m: i32, k: i32) -> i64 {
let mut win = HashMap::new();
let mut sum = 0;
for i in 0..k as usize {
win.insert(nums[i], i);
sum += nums[i] as i64;
}
let mut ans = 0i64;
if win.len() >= m as usize {
ans = ans.max(sum);
}
for i in k as usize..nums.len() {
if let Some(&start) = win.get(&nums[i-k as usize]) {
if start == i - k as usize {
win.remove(&nums[i-k as usize]);
}
}
win.insert(nums[i], i);
sum += (nums[i] - nums[i-k as usize]) as i64;
if win.len() >= m as usize {
ans = ans.max(sum);
}
}
ans
}
}
题目链接
https://leetcode.cn/problems/maximum-sum-of-almost-unique-subarray/description/


![[pdf,epub]105页《分析模式》漫谈合集01](https://i-blog.csdnimg.cn/direct/fface344142f4fa58add454782ea9b7e.png)




![[Approaching any Machine Learning] Supervised vs unsupervised learning - Note](https://i-blog.csdnimg.cn/direct/ec3ae78c04634383bffc9c85d7becd5f.png#pic_center)











