6160. 和有限的最长子序列
题解:排序,枚举
class Solution {
public:
vector<int> answerQueries(vector<int>& nums, vector<int>& queries) {
sort(nums.begin(), nums.end());
vector<int> res;
for(auto q : queries){
int sum = 0, k = 0;
for(auto c : nums){
if(sum + c <= q){
sum += c;
k++;
}else break;
}
res.push_back(k);
}
return res;
}
};
6161. 从字符串中移除星号
题解: 栈
class Solution {
public:
string removeStars(string s) {
stack<char> st;
for(int i=0; i<s.size(); i++){
if(s[i] != '*'){
st.push(s[i]);
}else{
if(!st.empty()){
st.pop();
}
}
}
if(st.empty()) return "";
string res;
while(!st.empty()){
res += st.top();
st.pop();
}
reverse(res.begin(), res.end());
return res;
}
};
6162. 收集垃圾的最少总时间
题解:模拟
class Solution {
public:
int garbageCollection(vector<string>& garbage, vector<int>& travel) {
int res = 0;
string s = "MPG";
for(auto c : s){
int k = 0;
for(int i=0; i<garbage.size(); i++){
int cnt = 0;
for(auto v : garbage[i]){
if(c == v){
cnt++;
}
}
if(cnt){
k = i;
}
res += cnt;
}
for(int j=0; j<k; j++) res += travel[j];
}
return res;
}
};
6163. 给定条件下构造矩阵
题解: 拓扑排序
class Solution {
public:
int n;
vector<int> topsort(vector<vector<int>>& es){
vector<vector<int>> g(n+1, vector<int>(n+1));
vector<int> d(n+1);
for(auto& e : es){
int a = e[0], b = e[1];
g[a].push_back(b);
d[b]++;
}
queue<int> q;
vector<int> res;
for(int i=1; i<=n; i++){
if(!d[i]) q.push(i);
}
while(q.size()){
auto t = q.front();
q.pop();
res.push_back(t);
for(auto e : g[t]){
if(--d[e] == 0){
q.push(e);
}
}
}
return res;
}
int get(vector<int> f, int x){
for(int i=0; i<f.size(); i++){
if(f[i] == x){
return i;
}
}
return -1;
}
vector<vector<int>> buildMatrix(int k, vector<vector<int>>& rowConditions, vector<vector<int>>& colConditions) {
n = k;
vector<int> rows = topsort(rowConditions);
vector<int> cols = topsort(colConditions);
if(rows.size() < n || cols.size() < n){
return {};
}
vector<vector<int>> res(n, vector<int>(n));
for(int i=1; i<=n; i++){
res[get(rows, i)][get(cols,i)] = i;
}
return res;
}
};