文章目录
- 题目描述
- 题解思路
- 题解代码
- 题目链接
题目描述
题解思路
我们遍历长度为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/