[hashset]leetcode2261:含最多 K 个可整除元素的子数组(medium)

[hashset]leetcode2261:含最多 K 个可整除元素的子数组(medium),第1张

题目:


题解:

提示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();
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1295401.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-10
下一篇2022-06-10

发表评论

登录后才能评论

评论列表(0条)

    保存