其他分享
首页 > 其他分享> > leetcode周赛235

leetcode周赛235

作者:互联网

1.水题

class Solution {
public:
    string truncateSentence(string s, int k) {
        string t="";
        if(k==0)
            return "";
        else
        {
            int i=0;
            int cnt=0;
            while(i<s.length()&&cnt<k)
            {
                if(s[i]==' ')
                {
                    cnt++;
                }
                if(cnt<k)
                {
                    t+=s[i];
                }
                i++;
            }
        }
        return t;
    }
};

2.主要是hash的用法,用map套set,语法上如何处理

class Solution {
public:
    vector<int> findingUsersActiveMinutes(vector<vector<int>>& logs, int k) {
        unordered_map<int,unordered_set<int> > hash;//unordered_set无序去重
        for(int i=0;i<logs.size();i++)
        {
            hash[logs[i][0]].insert(logs[i][1]);
        }
        vector<int> a(k);//初始化vector的操作别忘了
        for(auto& i:hash)
        {
            a[i.second.size()-1]++;//下标从1开始的处理
        }

        return a;
    }
};

3 首先找出和nums2数组中每个数最接近的nums1中的数。把nums1排序二分查找,这样不会超时。注意二分查找后,最接近的数可能是我们当前查找到的数也可能是上一个数。
再算出原本nums1和nums2的距离ans。在每个nums1中的数替换后,都有一个abs(numscopy[t]-nums2[i]),找到其中的最大值,用ans=res-maxx得到答案。
需要注意的是,如果替换后效果更差,即ans<0了,就选择不替换。

class Solution {
public:
    int minAbsoluteSumDiff(vector<int>& nums1, vector<int>& nums2) {
        vector<int> numscopy=nums1;
        vector<long long> a(nums2.size()+1);
        sort(numscopy.begin(),numscopy.end());
        int mod=1e9+7;
        for(int i=0;i<nums2.size();i++)
        {
            int t;
            if(nums2[i]>numscopy[0]&&nums2[i]<numscopy[numscopy.size()-1])
            {
                t=lower_bound(numscopy.begin(),numscopy.end(),nums2[i])-numscopy.begin();
                int s=t-1;
                if(abs(numscopy[s]-nums2[i])>=abs(numscopy[t]-nums2[i]))
                {
                    
                    a[i]=(long long)abs(numscopy[t]-nums2[i]);
                }
                else
                {
                    a[i]=(long long)abs(numscopy[s]-nums2[i]);
                }
            }
            else if(nums2[i]>numscopy[0])
            {
                t=numscopy.size()-1;

                a[i]=(long long)abs(numscopy[t]-nums2[i]);

            }
            else
            {
                t=0;

                a[i]=(long long)abs(numscopy[t]-nums2[i]);
            }
        }


        long long maxx=0;
        for(int i=0;i<nums1.size();i++)
        {
            long long temp=(long long)abs(nums1[i]-nums2[i]);
            maxx=max(maxx,(long long)abs(a[i]-temp));
        }

        long long ans=0;
        for(int i=0;i<nums1.size();i++)
        {
            ans=ans+(long long)abs(nums1[i]-nums2[i]);
        }

        long long res=(ans-maxx)%mod;
        if(ans>0)
            return (int)res;
        else
            return (int)ans;

    }
};

4.一道好题。题目要求找到子序列中最小公倍数的数目。

class Solution {
public:
    int countDifferentSubsequenceGCDs(vector<int>& nums) {
        int t;
        vector<int> gcdd(200001);
        for(auto x:nums)
        {
            for(int i=1;i*i<=x;i++)
            {
                if(x%i==0)
                {
                    if(!gcdd[i])
                    {
                        gcdd[i]=x;
                    }
                    else
                    {
                        gcdd[i]=gcd(x,gcdd[i]);
                    }
                    if(i*i!=x)
                    {
                        if(!gcdd[x/i])
                        {
                            gcdd[x/i]=x;
                        }
                        else
                        {
                            gcdd[x/i]=gcd(x,gcdd[x/i]);
                        }
                    }
                }
                
            }
        }

        unordered_set<int> ans;
        for(int i=1;i<gcdd.size();i++)
        {
            if(gcdd[i]==i)
            {
                ans.insert(gcdd[i]);
            }
        }
        return ans.size();
        
    }
};

标签:周赛,int,long,gcdd,ans,numscopy,235,leetcode,nums2
来源: https://blog.csdn.net/jcjbusbjk/article/details/115550892