LeetCode 2841.几乎唯一子数组的最大和
题目:
给你一个整数数组 nums
和两个正整数 m
和 k
。
请你返回 nums
中长度为 k
的 几乎唯一 子数组的 最大和 ,如果不存在几乎唯一子数组,请你返回 0
。
如果 nums
的一个子数组有至少 m
个互不相同的元素,我们称它是 几乎唯一 子数组。
子数组指的是一个数组中一段连续 非空 的元素序列。
思路:
代码:
class Solution {public long maxSum(List<Integer> nums, int m, int k) {Integer[] a = nums.toArray(Integer[]::new);int n = a.length;Map<Integer, Integer> map = new HashMap<>();long ans = 0;long sum = 0;for (int i = 0; i < n; i++) {sum += a[i];map.merge(a[i], 1, Integer::sum);if (i - k + 1 < 0) {continue;}if (map.size() >= m) {ans = Math.max(ans, sum);}int c = map.get(a[i - k + 1]);if (c > 1) {map.put(a[i - k + 1], c - 1);} else {map.remove(a[i - k + 1]);}sum -= a[i - k + 1];}return ans;}
}
性能: