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;
}
};