随笔 - 40  文章 - 0  评论 - 0  阅读 - 1190

【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;
}
};
posted on   damnglamour  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示