题目:
题解:
提示1:枚举所有子数组并找到满足所有条件的子数组。
- 显然使用双重 for 枚举所有满足题意的子数组。
提示2:使用任何合适的方法对子数组进行散列,以避免重复。
- 这个将所有子数组拼接成一个字符串,然后用来去除相同的子数组的,我确实没想到可以这样做。
因此最终思路就是双重 for + hashset 去重即可。
代码如下:
class Solution {
public:
int countDistinct(vector& a, int k, int p) {
int n=a.size();
// 将不同子数组连接成一个字符串来去除相同的子数组
unordered_set st;
// 双指针寻找满足要求的子数组
for(int i=0;i
int cnt=0;
string s;
for(int j=i;j
if(a[j]%p==0)cnt++;
if(cnt>k)break;
s+=a[j]+'0';
st.insert(s);
}
}
return st.size();
}
};


![[hashset]leetcode2261:含最多 K 个可整除元素的子数组(medium) [hashset]leetcode2261:含最多 K 个可整除元素的子数组(medium)](http://www.mshxw.com/aiimages/31/923492.png)
