Leetcode 992. Subarray of K different integers

topic

Insert image description here

Leetcode 992. Subarray of K different integers

Code (9.27 first brush to see the analysis)

Sliding window, exactly converted to: at most K different numbers - at most K-1 different numbers

class Solution {
    
    
public:
    int subarraysWithKDistinct(vector<int>& nums, int k) {
    
    
        return help(nums, k) - help(nums, k-1);
    }
    int help(vector<int>& nums, int k) {
    
    
        int n = nums.size();
        vector<int> window(n+1);
        int l = 0, r = 0;
        int res = 0;
        int cur = 0;
        while(r < n) {
    
    
            int num = nums[r++];
            if(!window[num])
                cur++;
            window[num]++;
            while(cur > k) {
    
    
                int num2 = nums[l++];
                window[num2]--;
                if(!window[num2])
                    cur--;
            }
            res += r-l;
        }
        return res;
    }
};

You can also take a look at this similar question: 1248. Statistics of "Elegant Subarrays"

Guess you like

Origin blog.csdn.net/weixin_51322383/article/details/133364506