力扣第 308 场周赛

115 篇文章 3 订阅
35 篇文章 3 订阅

LeetCode 2389. 和有限的最长子序列

class Solution {
public:
    vector<int> answerQueries(vector<int>& nums, vector<int>& queries) {
        int n=nums.size(),m=queries.size();
        vector<int>v(m);
        sort(nums.begin(),nums.end());
        vector<int>s(n);
        for(int i=0;i<n;i++)
            if(!i)s[i]=nums[i];
            else s[i]=s[i-1]+nums[i];
        for(int i=0;i<m;i++)
        {
            int l=-1,r=n-1;
            while(l<r)
            {
                int mid=l+r+1>>1;
                if(s[mid]<=queries[i])l=mid;
                else r=mid-1;
            }
            v[i]=l+1;
        }
        return v;
    }
};

LeetCode 2390. 从字符串中移除星号

class Solution {
public:
    string removeStars(string s) {
        stack<char>stk;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='*'&&stk.size())stk.pop();
            else stk.push(s[i]);
        }
        string res;
        while(stk.size())res+=stk.top(),stk.pop();
        reverse(res.begin(),res.end());
        return res;
    }
};

LeetCode 2391. 收集垃圾的最少总时间

class Solution {
public:
    int garbageCollection(vector<string>& garbage, vector<int>& travel) {
        int n=garbage.size();
        unordered_map<char,int>mp;
        int res=0;
        vector<int>v(3);
        for(int i=0;i<n;i++)
        {
            mp.clear();
            for(int j=0;j<garbage[i].size();j++)
            {
                char c=garbage[i][j];
                mp[c]++;
                if(c=='M')v[0]=max(v[0],i);
                if(c=='P')v[1]=max(v[0],i);
                if(c=='G')v[2]=max(v[2],i);   
            }
            for(auto x:mp)res+=x.second;
        }
        vector<int>s(n-1);
        for(int i=0;i<n-1;i++)
            if(!i)s[i]=travel[i];
            else s[i]=s[i-1]+travel[i];
        for(int i=0;i<3;i++)
            if(v[i]-1>=0)res+=s[v[i]-1];
        return res;
    }
};

LeetCode 2392. 给定条件下构造矩阵

class Solution {
public:
    int n;
    vector<int>topsort(vector<vector<int>>&v)
    {
        vector<vector<int>>g(n+1);
        vector<int>ind(n+1);
        for(int i=0;i<v.size();i++)
        {
            int a=v[i][0],b=v[i][1];
            g[a].push_back(b);
            ind[b]++;
        }
        queue<int>q;
        for(int i=1;i<=n;i++)
            if(!ind[i])q.push(i);
        vector<int>res;
        while(q.size())
        {
            auto t=q.front();
            q.pop();
            res.push_back(t);
            for(int i=0;i<g[t].size();i++)
            {
                if(--ind[g[t][i]]==0)
                    q.push(g[t][i]);
            }
        }
        return res;
    }
    int get_idx(vector<int>&v,int x)
    {
        for(int i=0;i<n;i++)
            if(v[i]==x)
                return i;
        return -1;
    }
    vector<vector<int>> buildMatrix(int k, vector<vector<int>>& row, vector<vector<int>>& col) {
        n=k;
        vector<int>v1,v2;
        v1=topsort(row);
        v2=topsort(col);
        if(v1.size()<n||v2.size()<n)return {};
        vector<vector<int>>v(n,vector<int>(n));
        for(int i=1;i<=n;i++)
            v[get_idx(v1,i)][get_idx(v2,i)]=i;
        return v;
    }
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leimingzeOuO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值