JZX轻语:简
LeetCode 2799 - 统计完全子数组的数目
发表于2025年05月01日
同样是滑动窗口的套路题目,窗口左侧每移动一位,右侧移到刚好满足条件,然后右侧后面所有的子数组都能满足条件。具体思路可以参考2962题。
class Solution {
public:
int countCompleteSubarrays(vector<int>& nums) {
int ans {0};
unordered_map<int, int> cnt_map;
int distinct_cnt = set(nums.begin(), nums.end()).size();
int cur_distinct_cnt {0}, n {static_cast<int>(nums.size())}, right {0};
for (int left = 0; left < n; ++left) {
while (right < n && cur_distinct_cnt < distinct_cnt) {
if ((cnt_map[nums[right++]]++) == 0) ++cur_distinct_cnt;
}
if (cur_distinct_cnt == distinct_cnt) ans += (n - right + 1);
if ((--cnt_map[nums[left]]) == 0) --cur_distinct_cnt;
}
return ans;
}
};
相关题目: