【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
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;
}
};
浙公网安备 33010602011771号