题目:
给你一个整数数组 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)
}