第74场双周赛

第一次打双周赛。。
在这里插入图片描述

第二题超时代码:

class Solution {
public:
    long long maximumSubsequenceCount(string text, string pattern) {
        vector<int>a;
        vector<int>b;
        for(int i=0;i<text.size();i++){
            if(text[i]==pattern[0])a.push_back(i);
            if(text[i]==pattern[1])b.push_back(i);
        }
        if(a.size()>=b.size())b.push_back(100000);
        //else a.insert(a.begin(),-1);
        else a.push_back(-1);
        long long ways=0;
        for(int i=0;i<a.size();i++){
            for(int j=0;j<b.size();j++){
                if(b[j]>a[i]){
                    ways+=b.size()-j;
                    break;
                }
            }
        }
        return ways;
    }
};

正确代码:

class Solution {
public:
    long long maximumSubsequenceCount(string text, string pattern) {
        int asize=0,bsize=0;
        long long ways=0;
        int flag=0;
        for(int i=0;i<text.size();i++){
            if(text[i]==pattern[0])asize++;
            if(text[i]==pattern[1])bsize++;
        }
        if(asize==0&&bsize==0)return ways;
        if(pattern[0]==pattern[1]){
            text.append(pattern.substr(1,1));
            for(int i=0;i<text.size();i++){
                if(text[i]==pattern[0]){
                     ways+=flag;
                     flag++;
                }
            }
            return ways;
        }
        if(asize>=bsize)text.append(pattern.substr(1,1));
        else text.insert(0,pattern.substr(0,1));
        for(int i=0;i<text.size();i++){
            if(text[i]==pattern[0])flag++;
            if(text[i]==pattern[1])ways+=flag;
        }
        return ways;
    }
};

第三题错误代码:

class Solution {
public:
    int halveArray(vector<int>& nums) {
        int n=nums.size();
        float sum=0;
        vector<float>nums1(n);
        for(int i=0;i<n;i++){
            nums1[i]=(float)nums[i];
            sum+=nums1[i];
        }
        int k=sum;
        int count=0;
        while(k>=sum/2){
            int maxflag=0;
            for(int i=0;i<n;i++){
                if(nums1[i]>nums1[maxflag])maxflag=i;
            }
            nums1[maxflag]/=2;
            k-=nums1[maxflag];
            count++;
        }
        return count;
    }
};

超时代码:

class Solution {
public:
    int halveArray(vector<int>& nums) {
        int n=nums.size();
        double sum=0;
        vector<double>nums1(n);
        for(int i=0;i<n;i++){
            nums1[i]=(double)nums[i];
            sum+=nums1[i];
        }
        double k=sum;
        int count=0;
        while(k>=sum/2){
            int maxflag=0;
            for(int i=0;i<n;i++){
                if(nums1[i]>nums1[maxflag])maxflag=i;
            }
            nums1[maxflag]/=2;
            k-=nums1[maxflag];
            count++;
        }
        return count;
    }
};

居然是用优先队列。。好吧我寄了。。
正确代码:

class Solution {
public:
    priority_queue<double> a;
    int halveArray(vector<int>& nums) {
        double sum=0,num=0;
        while(!a.empty())a.pop();
        for(int i=0;i<nums.size();i++)a.push(nums[i]),sum+=nums[i];
        for(int i=1;i<=nums.size();i++)
        {
            double xx=a.top();a.pop();
            num+=xx/2.0;
            a.push(xx/2.0);
            if(num>=sum/2.0)return i;
        }
        return nums.size();
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值