首页 > 其他分享 >LeetCode 992. K 个不同整数的子数组

LeetCode 992. K 个不同整数的子数组

时间:2024-03-16 17:31:26浏览次数:34  
标签:nums int 992 j1 j2 a2 cnt2 数组 LeetCode

解题思路

举一个例子可能会比较好理解
nums = [1,2,1,2,3], k = 2
i表示的是右指针,j表示的是左指针。
i=3时,
需要求出符合子数组中含有k个不同整数,此时的j1=0
需要求出符合子数组中含有k-1个不同整数,此时的j2=1
j1~j2之间就是符合子数组中含有k个不同整数的子数组个数。

相关代码

class Solution {
    public int subarraysWithKDistinct(int[] nums, int k) {  
        int a1[] = new int[20010];
        int a2[] = new int[20010];
        int res=0;
        for(int i=0,j1=0,j2=0,cnt1=0,cnt2=0;i<nums.length;i++){
            if(a1[nums[i]]==0) cnt1++;
            a1[nums[i]]++;
            while(j1<=i&&cnt1>k){
                if(a1[nums[j1]]==1) cnt1--;
                a1[nums[j1]]--;
                j1++;
            }

            if(a2[nums[i]]==0) cnt2++;
            a2[nums[i]]++;
            while(j2<=i&&cnt2>=k){
                if(a2[nums[j2]]==1) cnt2--;
                a2[nums[j2]]--;
                j2++;
            }
            if(cnt1==k&&cnt2==k-1){
                res=res+j2-j1;
            } 
        }
        return res;
    }
}

标签:nums,int,992,j1,j2,a2,cnt2,数组,LeetCode
From: https://blog.csdn.net/weixin_55057111/article/details/136614375

相关文章

  • 指针数组、数组指针、函数指针、指针函数
    数组指针:是指向数组的指针,它还是一个指针,只不过指向数组而已行指针定义形式:int(*p)[10]一定要加(),因为[]优先级高于*,所以必须要(*p)指一行,这里10为列的元素个数例1:二维数组数值为1-12,用行指针定义输出8例2:用行指针传参,2*3数组,输出第二行指针数组:实际是一个数组,长度是......
  • 函数指针数组(转移表)
    函数指针数组,首先是一个数组,其次其中存储的数据类型是函数指针,所以我们可以通过使用函数指针数组来调用不同的函数。接下来为大家展示他的基本使用方法(模拟计算器)函数指针数组结构   int(*arr[])(intx,inty)={NULL,Add,Sub,Mul,Div};其中NULL,Add,Sub,Mul,Div......
  • P3374 【模板】树状数组 动态求连续区间和 刷题笔记
    我们创建如下的树状数组来辅助操作该数组每个s[i]处于第几层取决于其二进制最后低位的1处于从右往左数第几列显然所有奇数的最右边一位都是1即其最低位的1处于右边第一列所以所有的奇数处于第一层而2,6,10,14的最低位1处于右边第二列 所以这些数处于第二层 8的最......
  • 2024-03-16:用go语言,给你一个正整数数组 nums, 每一次操作中,你可以从 nums 中选择 任意
    2024-03-16:用go语言,给你一个正整数数组nums,每一次操作中,你可以从nums中选择任意一个数并将它减小到恰好一半。(注意,在后续操作中你可以对减半过的数继续执行操作)请你返回将nums数组和至少减少一半的最少操作数。输入:nums=[5,19,8,1]。输出:3。答案2024-03-16:......
  • LeetCode网 - 0001:Two Sum
    Givenanarrayofintegersnums andanintegertarget,returnindicesofthetwonumberssuchthattheyadduptotarget.Youmayassumethateachinputwouldhaveexactlyonesolution,andyoumaynotusethesameelementtwice.Youcanreturntheanswer......
  • 代码随想录算法训练营day24 | leetcode 77. 组合
    目录题目链接:77.组合题目链接:77.组合题目描述:给定两个整数n和k,返回范围[1,n]中所有可能的k个数的组合。你可以按任何顺序返回答案。示例1:输入:n=4,k=2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例2:输入:n=1,k=1输出:[[1]......
  • 数组
    一,为什么需要数组由于变量只能存放一个值,当一回存放多个值会很麻烦,所以C++的创造者增加了数组这个概念,能够同时存放多个值。二,一维数组1.一维数组的定义//数组定义//格式:数据类型数组名[数组长度]={元素1,元素2,元素3};inta1[5];floata2[15];doublea3[100];chara4......
  • 【C语言初阶(五)】数组
    ❣博主主页:33的博客❣▶文章专栏分类:C语言从入门到精通◀......
  • leetcode代码记录(子集
    目录1.题目:2.我的代码:小结:1.题目:给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例1:输入:nums=[1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示......
  • LeetCode01.两数之和
    ques:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=......