【2022-07-23-第83场双周赛】

总结

很简单的双周赛,可惜上网去了,不然还是有机会拿奖品的。

Q1.最好的扑克手牌

直接模拟。

class Solution {
public:
    string bestHand(vector<int>& r, vector<char>& s) {
        set<char> hs;
        map<int, int> mp;
        for(auto i : s) hs.insert(i);
        for(auto i : r) mp[i]++;
        if(hs.size() == 1) return "Flush";
        int t = 1;
        for(auto &i : mp){
            t = max(t, i.second);
        }
        if(t >= 3) return "Three of a Kind";
        else if(t == 2) return "Pair";
        else return "High Card";
    }
};

Q2.全 0 子数组的数目

直接DP。

class Solution {
public:
    long long zeroFilledSubarray(vector<int>& a) {
        int n = a.size();
        long long dp[n + 1], ret = 0; dp[0] = 0;
        for(int i = 0; i < n; ++i){
            if(a[i] == 0) dp[i + 1] = dp[i] + 1;
            else dp[i + 1] = 0; 
            ret += dp[i + 1];
        }
        return ret;
    }
};

Q3.设计数字容器系统

直接哈希。

class NumberContainers {
public:
    
    map<int, set<int> > mp1;
    map<int, int> mp2;
    NumberContainers() {
        
    }
    
    void change(int idx, int n) {
        if(mp2.find(idx) != mp2.end()) 
        mp1[mp2[idx]].erase(idx);
        mp2[idx] = n;
        mp1[n].insert(idx);
    }
    
    int find(int n) {
        if(mp1.find(n) == mp1.end() || mp1[n].size() == 0) return -1;
        return *mp1[n].begin();
    }
};

Q4.不可能得到的最短骰子序列

就是全序列子数组数目加1。

class Solution {
public:
int shortestSequence(vector& r, int k) {
int h[k + 1], t = 0, ret = 0; memset(h, 0, sizeof(h));
for(auto i : r){
if(h[i] == ret) ++h[i], ++t;
if(t == k){
t = 0;
++ret;
}
}
return ret + 1;
}
};

posted on 2022-08-02 15:26  damnglamour  阅读(30)  评论(0)    收藏  举报