0
点赞
收藏
分享

微信扫一扫

286次周赛代码

f12b11374cba 2022-03-27 阅读 34

 第一题直接过了,哈希表

class Solution {
public:
    vector<vector<int>> findDifference(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int>hash1;
        unordered_set<int>hash2;
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
        nums1.resize(distance(nums1.begin(), unique(nums1.begin(), nums1.end())));
        nums2.resize(distance(nums2.begin(), unique(nums2.begin(), nums2.end())));
        int m=nums1.size();
        int n=nums2.size();
        vector<vector<int>>res(2);
        for(int i=0;i<m;i++)
        {
            hash1.insert(nums1[i]);
        }
        for(int i=0;i<n;i++)
        {
            hash2.insert(nums2[i]);
        }
        for(int i=0;i<m;i++)
        {
            if(!hash2.count(nums1[i]))
                res[0].push_back(nums1[i]);
        }
        for(int i=0;i<n;i++)
        {
            if(!hash1.count(nums2[i]))
                res[1].push_back(nums2[i]);
        }
        return res;
    }
};

 TLE了,有空再研究下咋回事

class Solution {
public:
    int minDeletion(vector<int>& nums) {
        int n=nums.size();
        int i=0;
        vector<int>temp(n,0);
        int res=0;
        for(int i=0;i<n;i++)
        {
            if(i%2)
                temp[i]=-1;
            else
                temp[i]=1;
        }
        while(i<n-1)
        {
            if(nums[i]==nums[i+1])
            {
                int k=0;
                while(i+k<n&&nums[i+k]==nums[i])
                    k++;
                k--;
                if(temp[i]==1)
                {
                    res+=k;
                    /*
                    if(i+k==n-1)
                        return res;
                    */
                    if(k%2)
                    {
                        for(int j=i+k+1;j<n;j++)
                        {
                            temp[j]=-temp[j];
                        }
                    }
                }
                else
                {
                    if(k==1)
                    {    
                        i+=2;
                        continue;
                    }
                    res+=k-1;
                    /*
                    if(i+k==n-1)
                        return res;
                    */
                    if((k-1)%2)
                    {
                        for(int j=i+k+1;j<n;j++)
                        {
                            temp[j]=-temp[j];
                        }
                    }
                }
                i+=k+1;
                continue;
            }
            i++;
        }
        //cout<<n-res<<endl;
        if((n-res)%2)
            res++;
        return res;
    }
};

 回溯一定TLE

class Solution {
public:
    vector<int>temp;
    int res;
    void seize(int n,int k,int count,vector<vector<int>>& piles)
    {
        if(k==0)
        {
            res=max(count,res);
            return;
        }
        for(int i=0;i<n;i++)
        {
            if(temp[i]<piles[i].size())
            {
                count+=piles[i][temp[i]];
                temp[i]++;
                //cout<<count<<endl;
                seize(n,k-1,count,piles);
                temp[i]--;
                count-=piles[i][temp[i]];  
            }
        }
    }
    int maxValueOfCoins(vector<vector<int>>& piles, int k) {
        int n=piles.size();
        res=0;
        for(int i=0;i<n;i++)
            temp.push_back(0);
        seize(n,k,0,piles);
        return res;
        
    }
};
举报

相关推荐

0 条评论