LeetCode 2799.统计完全子数组的数目
题目:
给你一个由 正 整数组成的数组 nums
。
如果数组中的某个子数组满足下述条件,则称之为 完全子数组 :
- 子数组中 不同 元素的数目等于整个数组不同元素的数目。
返回数组中 完全子数组 的数目。子数组 是数组中的一个连续非空序列。
思路:求子数组个数:越长越合法
代码:
class Solution {public int countCompleteSubarrays(int[] nums) {Set<Integer> set = new HashSet<>();for (int num : nums) {set.add(num);}int nNums = set.size();Map<Integer, Integer> sonMap = new HashMap<>();int left = 0;int ans = 0;for (int right = 0; right < nums.length; right++) {sonMap.merge(nums[right], 1, Integer::sum);while (sonMap.size() == nNums) {sonMap.merge(nums[left], -1, Integer::sum);if (sonMap.get(nums[left]) == 0) {sonMap.remove(nums[left]);}left++;}ans += left;}return ans;}
}
性能: