【LeetCode】第 308 场周赛题解

105 阅读1分钟

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