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;
    }
};

相关题目:

闪念标签:LC

题目链接:https://leetcode.cn/problems/count-complete-subarrays-in-an-array/