2261. 含最多 K 个可整除元素的子数组

103 阅读1分钟

题目:
给你一个整数数组 nums 和两个整数 k 和 p ,找出并返回满足要求的不同的子数组数,要求子数组中最多 k 个可被 p 整除的元素。

如果满足下述条件之一,则认为数组 nums1 和 nums2 是 不同 数组:

  • 两数组长度 不同 ,或者
  • 存在 至少 一个下标 i 满足 nums1[i] != nums2[i] 。

子数组 定义为:数组中的连续元素组成的一个 非空 序列。

算法:
方法一:暴力 + hash去重 1.子数组是连续的,降低了难度。
2.数据量不大,用map对重复数组去重,暴力即可。
去重可以自然想到hash。

func countDistinct(nums []int, k int, p int) int {
    sumArr := make(map[[200]int]struct{}, 0)
    for i := range nums {
        cnt := 0
        subNum := [200]int{}
        for j, v := range nums[i:] {
            if v % p == 0 {
                cnt ++
                if cnt > k {
                    break
                }
            }
            subNum[j] = v
            sumArr[subNum] = struct{}{}
        }
    }
    return len(sumArr)
}