Leetcode第 308 场周赛
这次也开开心心AK了,一看排名。从交完800多(应该)然后慢慢快调到951。。。。。最后一题wa了三次 判断环没有判好。第一题以为数据量很大 磨磨唧唧写半天。
6160. 和有限的最长子序列
class Solution {
public:
vector<int> answerQueries(vector<int>& nums, vector<int>& queries) {
sort(nums.begin(),nums.end());
int n = nums.size(), m = queries.size();
vector<int> ans(m,0);
for(int i=0;i<m;i++) {
int t = 0, sum = 0, flag = 0;
for(int j=0;j<n;j++) {
if(sum+nums[j] > queries[i]) break;
sum += nums[j];
ans[i] = j + 1;
}
}
return ans;
}
};
6161. 从字符串中移除星号
class Solution {
public:
string removeStars(string s) {
string ans = "";
for(int i=0;i<s.size();i++) {
if(s[i]=='*'){
if(ans.size()>0) ans.pop_back();
}
else {
ans.push_back(s[i]);
}
}
return ans;
}
};
6162. 收集垃圾的最少总时间
class Solution {
public:
int garbageCollection(vector<string>& garbage, vector<int>& travel) {
int n = garbage.size();
vector<vector<int>> v(3,vector<int>(n,0));
vector<int> dis(3,-1);
for (int i=0;i<n;i++) {
for(char c:garbage[i]) {
if(c=='M') v[0][i]++,dis[0]=i;
if(c=='P') v[1][i]++,dis[1]=i;
if(c=='G') v[2][i]++,dis[2]=i;
}
}
int ans = 0;
for(int i=0;i<3;i++) {
if(dis[i]!=-1) {
for(int j=0;j<=dis[i];j++) {
ans+=v[i][j];
if(j!=0) ans+=travel[j-1];
}
}
}
return ans;
}
};
6163. 给定条件下构造矩阵
class Solution {
public:
vector<int> tupu(int n, int k,vector<vector<int>> Conditions){
vector<vector<int>> v(k+1);
vector<int> de(k+1);
vector<int> ans;
for(int i=0;i<n;i++) {
if(i!=0&&Conditions[i-1]==Conditions[i]) continue;
de[Conditions[i][1]]++;
v[Conditions[i][0]].push_back(Conditions[i][1]);
}
queue<unsigned int> q;
for(int i=1;i<=k;i++) {
if(de[i]==0) q.push(i);
}
if(q.size()==0) return {};
while(!q.empty()) {
int u = q.front();q.pop();
ans.push_back(u);
for(int i=0;i<v[u].size();i++) {
de[v[u][i]]--;
if(de[v[u][i]]==0) q.push(v[u][i]);
}
}
if(ans.size()!=k) return {};
return ans;
}
vector<vector<int>> buildMatrix(int k, vector<vector<int>>& rowConditions, vector<vector<int>>& colConditions) {
sort(rowConditions.begin(),rowConditions.end(),[](vector<int> &a,vector<int> &b){
if(a[0]==b[0]) return a[1]<b[1];
return a[0]<b[0];
});
sort(colConditions.begin(),colConditions.end(),[](vector<int> &a,vector<int> &b){
if(a[0]==b[0]) return a[1]<b[1];
return a[0]<b[0];
});
int n = rowConditions.size();
int m = colConditions.size();
auto ansRow = tupu(n,k,rowConditions);
if(ansRow.size()!=k) return {};
auto ansCol = tupu(m,k,colConditions);
if(ansCol.size()!=k) return {};
vector<vector<int>> plot(k+1,vector<int>(2));
for(int i=0;i<k;i++) plot[ansRow[i]][0] = i, plot[ansCol[i]][1] = i;
vector<vector<int>> ans(k,vector<int>(k));
for(int i=1;i<=k;i++) ans[plot[i][0]][plot[i][1]] = i;
return ans;
}
};