-
发表于 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 题目链接
-