![[hashset]leetcode2261:含最多 K 个可整除元素的子数组(medium),第1张 [hashset]leetcode2261:含最多 K 个可整除元素的子数组(medium),第1张](/aiimages/%5Bhashset%5Dleetcode2261%EF%BC%9A%E5%90%AB%E6%9C%80%E5%A4%9A+K+%E4%B8%AA%E5%8F%AF%E6%95%B4%E9%99%A4%E5%85%83%E7%B4%A0%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84%28medium%29.png)
题目:
题解:
提示1:枚举所有子数组并找到满足所有条件的子数组。
- 显然使用双重 for 枚举所有满足题意的子数组。
提示2:使用任何合适的方法对子数组进行散列,以避免重复。
- 这个将所有子数组拼接成一个字符串,然后用来去除相同的子数组的,我确实没想到可以这样做。
因此最终思路就是双重 for + hashset 去重即可。
代码如下:
class Solution {
public:
int countDistinct(vector<int>& a, int k, int p) {
int n=a.size();
// 将不同子数组连接成一个字符串来去除相同的子数组
unordered_set<string> st;
// 双指针寻找满足要求的子数组
for(int i=0;i<n;++i)
{
int cnt=0;
string s;
for(int j=i;j<n;++j)
{
if(a[j]%p==0)cnt++;
if(cnt>k)break;
s+=a[j]+'0';
st.insert(s);
}
}
return st.size();
}
};
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)