首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2022-01-13:K 个不同整数的子数组。 给定一个正整数数组

2022-01-13:K 个不同整数的子数组。 给定一个正整数数组

原创
作者头像
福大大架构师每日一题
发布于 2022-01-13 14:55:28
发布于 2022-01-13 14:55:28
3970
举报

2022-01-13:K 个不同整数的子数组。

给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定不同的子数组为好子数组。

(例如,1,2,3,1,2 中有 3 个不同的整数:1,2,以及 3。)

返回 A 中好子数组的数目。

来自力扣992。

答案2022-01-13:

两个窗口的滑动窗口。k-1窗口,k窗口。

时间复杂度:O(N)。

空间复杂度:O(N)。

代码用golang编写。代码如下:

代码语言:go
AI代码解释
复制
package main

import "fmt"

func main() {
    arr := []int{1, 2, 1, 2, 3}
    ret := subarraysWithKDistinct2(arr, 2)
    fmt.Println(ret)
}

func subarraysWithKDistinct2(arr []int, k int) int {
    return numsMostK(arr, k) - numsMostK(arr, k-1)
}

func numsMostK(arr []int, k int) int {
    i := 0
    res := 0
    count := make(map[int]int)
    for j := 0; j < len(arr); j++ {
        if count[arr[j]] == 0 {
            k--
        }
        count[arr[j]] = count[arr[j]] + 1
        for k < 0 {
            count[arr[i]] = count[arr[i]] - 1
            if count[arr[i]] == 0 {
                k++
            }
            i++
        }
        res += j - i + 1
    }
    return res
}

执行结果如下:

图片
图片

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2022-01-13:K 个不同整数的子数组。
给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定不同的子数组为好子数组。
福大大架构师每日一题
2022/03/04
3720
2022-01-13:K 个不同整数的子数组。
golang刷leetcode 滑动窗口(2)K 个不同整数的子数组
给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。
golangLeetcode
2022/08/02
4120
2025-06-28:长度可被 K 整除的子数组的最大元素和。用go语言,给定一个整数数组 nums 和一个整数 k ,求 nu
2025-06-28:长度可被 K 整除的子数组的最大元素和。用go语言,给定一个整数数组 nums 和一个整数 k ,求 nums 中长度为 k 的倍数的非空子数组中,子数组和的最大值。返回该最大和。
福大大架构师每日一题
2025/06/28
950
2025-06-28:长度可被 K 整除的子数组的最大元素和。用go语言,给定一个整数数组 nums 和一个整数 k ,求 nu
2024-06-01:用go语言,给定一个从0开始索引的整数数组 nums 、两个正整数 k 和 dist 。 数组的代价是该数
2024-06-01:用go语言,给定一个从0开始索引的整数数组 nums 、两个正整数 k 和 dist 。
福大大架构师每日一题
2024/06/07
2770
2024-06-01:用go语言,给定一个从0开始索引的整数数组 nums 、两个正整数 k 和 dist 。 数组的代价是该数
2025-07-18:最长乘积等价子数组。用go语言,给定一个只包含正整数的数组 nums。 定义:如果一个数组 arr 满足所
2025-07-18:最长乘积等价子数组。用go语言,给定一个只包含正整数的数组 nums。 定义:如果一个数组 arr 满足所有元素的乘积等于该数组最大公约数(GCD)与最小公倍数(LCM)的乘积,即
福大大架构师每日一题
2025/07/18
820
2025-07-18:最长乘积等价子数组。用go语言,给定一个只包含正整数的数组 nums。 定义:如果一个数组 arr 满足所
【刷穿 LeetCode】992. K 个不同整数的子数组(困难)
如果 nums 的某个子数组中不同整数的个数恰好为 k,则称 nums 的这个连续、不一定不同的子数组为好子数组。
宫水三叶的刷题日记
2021/02/20
5690
2025-08-02:最多 K 个元素的子数组的最值之和。用go语言,给定一个整数数组 nums 和一个正整数 k,请找出所有长
2025-08-02:最多 K 个元素的子数组的最值之和。用go语言,给定一个整数数组 nums 和一个正整数 k,请找出所有长度最多为 k 的连续子数组,计算这些子数组中最大值和最小值的和,并返回最大的那个和。
福大大架构师每日一题
2025/08/05
2400
2025-08-02:最多 K 个元素的子数组的最值之和。用go语言,给定一个整数数组 nums 和一个正整数 k,请找出所有长
2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。
2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。
福大大架构师每日一题
2022/06/04
5520
2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。
2025-06-01:执行操作后元素的最高频率Ⅰ。用go语言,给定一个整数数组 nums 和两个整数 k 以及 numOpera
2025-06-01:执行操作后元素的最高频率Ⅰ。用go语言,给定一个整数数组 nums 和两个整数 k 以及 numOperations。
福大大架构师每日一题
2025/06/06
1060
2025-06-01:执行操作后元素的最高频率Ⅰ。用go语言,给定一个整数数组 nums 和两个整数 k 以及 numOpera
​2021-03-30:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。<=K
2021-03-30:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。给定一个整数值K,找到arr的所有子数组里,哪个子数组的累加和<=K,并且是长度最大的。返回其长度。
福大大架构师每日一题
2021/03/30
5900
​2021-03-30:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。<=K
LeetCode *992. K 个不同整数的子数组(双指针)(滑动窗口)
给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。
SakuraTears
2022/01/13
4310
2025-07-31:最多 K 个元素的子序列的最值之和。用go语言,给定一个整数数组 nums 和一个正整数 k,求所有非空子
2025-07-31:最多 K 个元素的子序列的最值之和。用go语言,给定一个整数数组 nums 和一个正整数 k,求所有非空子序列中,长度不超过 k 的那些子序列的“最大元素和最小元素之和”的累加和。需要注意的是,子序列是从原数组中删去部分元素(顺序不变)得到的序列。
福大大架构师每日一题
2025/08/05
1340
2025-07-31:最多 K 个元素的子序列的最值之和。用go语言,给定一个整数数组 nums 和一个正整数 k,求所有非空子
2025-03-25:长度为 K 的子数组的能量值Ⅱ。用go语言,给定一个长度为 n 的整数数组 nums 和一个正整数 k,你
2025-03-25:长度为 K 的子数组的能量值Ⅱ。用go语言,给定一个长度为 n 的整数数组 nums 和一个正整数 k,你需要计算每个长度为 k 的子数组的能量值。
福大大架构师每日一题
2025/03/27
1700
2025-03-25:长度为 K 的子数组的能量值Ⅱ。用go语言,给定一个长度为 n 的整数数组 nums 和一个正整数 k,你
2024-10-30:或值至少 K 的最短子数组 I。用go语言,给定一个非负整数数组 nums 和一个整数 k,我们需要判断数
2024-10-30:或值至少 K 的最短子数组 I。用go语言,给定一个非负整数数组 nums 和一个整数 k,我们需要判断数组中是否存在一个最短的非空子数组,使得该子数组所有元素的按位或(OR)运算结果至少为 k。如果找到了这样的子数组,返回其长度;如果不存在,则返回 -1。
福大大架构师每日一题
2024/10/31
2320
2024-10-30:或值至少 K 的最短子数组 I。用go语言,给定一个非负整数数组 nums 和一个整数 k,我们需要判断数
2025-04-18:求出数组中最大序列值。用go语言,给定一个整数数组 nums 和一个正整数 k。 定义一个长度为 2*k
2025-04-18:求出数组中最大序列值。用go语言,给定一个整数数组 nums 和一个正整数 k。 定义一个长度为 2*k 的子序列 seq 的值为:
福大大架构师每日一题
2025/04/18
1080
2025-04-18:求出数组中最大序列值。用go语言,给定一个整数数组 nums 和一个正整数 k。 定义一个长度为 2*k
​2021-03-23:给定一个正整数组成的无序数组arr,给定一个正整数值K
2021-03-23:给定一个正整数组成的无序数组arr,给定一个正整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K并且是长度最大的。返回其长度。
福大大架构师每日一题
2021/03/23
5650
​2021-03-23:给定一个正整数组成的无序数组arr,给定一个正整数值K
2025-05-12:计算子数组的 x-sumⅠ。用go语言,给定一个长度为 n 的整数数组 nums,以及两个整数 k 和 x
2025-05-12:计算子数组的 x-sumⅠ。用go语言,给定一个长度为 n 的整数数组 nums,以及两个整数 k 和 x。
福大大架构师每日一题
2025/05/12
1000
2025-05-12:计算子数组的 x-sumⅠ。用go语言,给定一个长度为 n 的整数数组 nums,以及两个整数 k 和 x
2025-04-01:K 次乘运算后的最终数组Ⅰ。用go语言,给定一个整数数组 nums、一个整数 k 和一个乘数 multip
2025-04-01:K 次乘运算后的最终数组Ⅰ。用go语言,给定一个整数数组 nums、一个整数 k 和一个乘数 multiplier。你需要对数组 nums 执行 k 次操作。每次操作的步骤如下:
福大大架构师每日一题
2025/03/31
1110
2025-04-01:K 次乘运算后的最终数组Ⅰ。用go语言,给定一个整数数组 nums、一个整数 k 和一个乘数 multip
2022-02-16:将数组分割成和相等的子数组。 给定一个有 n
给定一个有 n 个整数的数组,你需要找到满足以下条件的三元组 (i, j, k) :
福大大架构师每日一题
2022/02/16
6550
LeetCode 992. K 个不同整数的子数组(双指针)
给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。
Michael阿明
2021/09/07
7320
推荐阅读
2022-01-13:K 个不同整数的子数组。
3720
golang刷leetcode 滑动窗口(2)K 个不同整数的子数组
4120
2025-06-28:长度可被 K 整除的子数组的最大元素和。用go语言,给定一个整数数组 nums 和一个整数 k ,求 nu
950
2024-06-01:用go语言,给定一个从0开始索引的整数数组 nums 、两个正整数 k 和 dist 。 数组的代价是该数
2770
2025-07-18:最长乘积等价子数组。用go语言,给定一个只包含正整数的数组 nums。 定义:如果一个数组 arr 满足所
820
【刷穿 LeetCode】992. K 个不同整数的子数组(困难)
5690
2025-08-02:最多 K 个元素的子数组的最值之和。用go语言,给定一个整数数组 nums 和一个正整数 k,请找出所有长
2400
2022-04-13:给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。
5520
2025-06-01:执行操作后元素的最高频率Ⅰ。用go语言,给定一个整数数组 nums 和两个整数 k 以及 numOpera
1060
​2021-03-30:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。<=K
5900
LeetCode *992. K 个不同整数的子数组(双指针)(滑动窗口)
4310
2025-07-31:最多 K 个元素的子序列的最值之和。用go语言,给定一个整数数组 nums 和一个正整数 k,求所有非空子
1340
2025-03-25:长度为 K 的子数组的能量值Ⅱ。用go语言,给定一个长度为 n 的整数数组 nums 和一个正整数 k,你
1700
2024-10-30:或值至少 K 的最短子数组 I。用go语言,给定一个非负整数数组 nums 和一个整数 k,我们需要判断数
2320
2025-04-18:求出数组中最大序列值。用go语言,给定一个整数数组 nums 和一个正整数 k。 定义一个长度为 2*k
1080
​2021-03-23:给定一个正整数组成的无序数组arr,给定一个正整数值K
5650
2025-05-12:计算子数组的 x-sumⅠ。用go语言,给定一个长度为 n 的整数数组 nums,以及两个整数 k 和 x
1000
2025-04-01:K 次乘运算后的最终数组Ⅰ。用go语言,给定一个整数数组 nums、一个整数 k 和一个乘数 multip
1110
2022-02-16:将数组分割成和相等的子数组。 给定一个有 n
6550
LeetCode 992. K 个不同整数的子数组(双指针)
7320
相关推荐
2022-01-13:K 个不同整数的子数组。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档