【2022-07-24-第303场单周赛】

总结
第三题段错误不应该,第四题属于是想岔了。
Q1.第一个出现两次的字母
暴力哈希。
class Solution {
public:
char repeatedCharacter(string s) {
int h[128]; memset(h, 0, sizeof(h));
for(auto i : s){
if(h[i] == 0) h[i]++;
else return i;
}
return 'a';
}
};
Q2.相等行列对
暴力哈希。
class Solution {
public:
int equalPairs(vector<vector<int>>& g) {
int n = g.size(), ret = 0;
map<vector<int>, int> mp;
for(int i = 0; i < n; ++i) mp[g[i]]++;
for(int i = 0; i < n; ++i){
vector<int> temp;
for(int j = 0; j < n; ++j) temp.push_back(g[j][i]);
if(mp.find(temp) != mp.end()) ret += mp[temp];
}
return ret;
}
};
Q3.设计食物评分系统
确认过眼神,是哈希场。
class FoodRatings {
public:
priority_queue<pair<int, string>, vector<pair<int, string>>, greater<>> q[20010];
map<string, int> mp1;
map<string, string> mp2;
map<string, int> mpidx;
FoodRatings(vector<string>& f, vector<string>& c, vector<int>& r) {
int idx = 0;
int n = f.size();
for(int i = 0; i < n; ++i){
if(mpidx.find(c[i]) == mpidx.end()){
mpidx[c[i]] = idx++;
}
q[mpidx[c[i]]].push({-r[i], f[i]});
mp1[f[i]] = r[i];
mp2[f[i]] = c[i];
}
}
void changeRating(string f, int nr) {
q[mpidx[mp2[f]]].push({-nr, f});
mp1[f] = nr;
}
string highestRated(string c) {
auto k = q[mpidx[c]].top();
while(k.first != -mp1[k.second]){
q[mpidx[c]].pop();
k = q[mpidx[c]].top();
}
return k.second;
}
};
Q4.优质数对的数目
二进制位为1的数目和大于等于k的数对数量。
class Solution {
public:
int getk(int x){
int ret = 0;
while(x){
ret += x & 1;
x >>= 1;
}
return ret;
}
long long countExcellentPairs(vector<int>& a, int k) {
long long ret = 0;
unordered_set<int> st[32];
for(auto i : a){
st[getk(i)].insert(i);
}
int n = 0;
for(int i = 0; i < 32; ++i) n += st[i].size();
for(int i = 0; i < 32; ++i){
for(auto u : st[i]){
for(int j = max(0, k - i); j < 32; ++j){
ret += st[j].size();
}
}
}
return ret;
}
};
浙公网安备 33010602011771号