题目
给你一个整数数组 nums 和两个正整数 m 和 k 。
请你返回 nums 中长度为 k 的 几乎唯一 子数组的 最大和 ,如果不存在几乎唯一子数组,请你返回 0 。
如果 nums 的一个子数组有至少 m 个互不相同的元素,我们称它是 几乎唯一 子数组。
子数组指的是一个数组中一段连续 非空 的元素序列
链接
代码
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Solution {
public long maxSum(List<Integer> nums, int m, int k) {
Map<Integer,Integer> map = new HashMap<>();
int different = 0;
long windowSum = 0;
long ansSum = 0;
for (int i = 0;i < k;i++) {
int val = nums.get(i);
windowSum += val;
int old = map.getOrDefault(val,0);
if (old == 0)
different++;
map.put(val,old + 1);
}
if (different >= m)
ansSum = windowSum;
for (int i = k;i < nums.size();i++) {
int removeval = nums.get(i - k);
windowSum -= removeval;
int removecnt = map.get(removeval);
removecnt--;
if (removecnt == 0) {
different--;
}
map.put(removeval,removecnt);
int addval = nums.get(i);
windowSum += addval;
int addcnt = map.getOrDefault(addval,0);
if (addcnt == 0)
different++;
map.put(addval,addcnt + 1);
if (different >= m) {
if (windowSum > ansSum)
ansSum = windowSum;
}
}
return ansSum;
}
}
纯手敲代码~
