水平实在是一言难尽,一共4道题,就做出来了一道。。不过这更加激励我要奋起直追
国内排名826 / 1647
全球排名3731 / 6833排名情况
注明:其中代码来自zerotrac2 ,如果大佬看到的话,请允许我向你表达我的敬意
5303. 解码字母到整数映射【就AC了这道题】
class Solution {
public:
string freqAlphabets(string s) {
int len=s.size();
//cout<<len<<endl;
string ans="";
int i=0;
//正常处理if(len<=2)
//相当于双指针问题
while(i+2<len){
if(s[i+2]=='#'){
int tmp=(s[i]-'0')*10+(s[i+1]-'0');
char temp=tmp-1+'a';
cout<<temp<<endl;
ans+=temp;
i=i+3;
}
else{
int tmp=s[i]-'0';
char temp=tmp-1+'a';
ans+=temp;
i++;
}
}
while(i<len){
int tmp=s[i]-'0';
char temp=tmp-1+'a';
ans+=temp;
i++;
}
return ans;
}
};
5304. 子数组异或查询
看看范例
class Solution {
public:
vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) {
vector<int> tmp;
tmp.push_back(0);
for(auto it:arr){
tmp.push_back(tmp.back()^it);
}
vector<int> res;
for(auto it:queries){
it[1]++;
res.push_back(tmp[it[1]]^tmp[it[0]]);
}
return res;
}
};
自己写的的超时了(呜呜呜)
class Solution {
public:
vector<int> findSubvec(int low,int high,vector<int>& arr){
vector<int> subvec{};
for(int k=0;k<=high-low;k++){
subvec.push_back(arr[low+k]);
}
return subvec;
}
vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) {
vector<int> res{};
vector<int> cur;
int len=queries.size();
for(int i=0;i<len;i++){
cout<<queries[i][0]<<" "<<queries[i][1]<<endl;
cur=findSubvec(queries[i][0],queries[i][1],arr);
for(int& item: cur) cout<<item<<" ";
cout<<endl;
int tmp=cur[0];
for(int j=1;j<cur.size();j++){
tmp^=cur[j];
}
res.push_back(tmp);
}
return res;
}
};
5305. 获取你好友已观看的视频
using PSI = pair<string, int>;
class Solution {
public:
vector<string> watchedVideosByFriends(vector<vector<string>>& watchedVideos, vector<vector<int>>& friends, int id, int level) {
int n = friends.size();
vector<bool> used(n);
queue<int> q;
q.push(id);
used[id] = true;
for (int _ = 1; _ <= level; ++_) {
int span = q.size();
for (int i = 0; i < span; ++i) {
int u = q.front();
q.pop();
for (int v: friends[u]) {
if (!used[v]) {
q.push(v);
used[v] = true;
}
}
}
}
unordered_map<string, int> videos;
while (!q.empty()) {
int u = q.front();
q.pop();
for (const string& watched: watchedVideos[u]) {
++videos[watched];
}
}
vector<PSI> ans;
for (auto& [k, v]: videos) {
ans.emplace_back(k, v);
}
sort(ans.begin(), ans.end(), [](const PSI& p, const PSI& q) {
return p.second < q.second || (p.second == q.second && p.first < q.first);
});
vector<string> fin;
for (const PSI& p: ans) {
fin.push_back(p.first);
}
return fin;
}
};
5306.让字符串成为回文串的最少插入次数
class Solution {
public:
int minInsertions(string s) {
int n = s.size();
vector<vector<int>> f(n, vector<int>(n));
for (int span = 2; span <= n; ++span) {
for (int i = 0; i <= n - span; ++i) {
int j = i + span - 1;
// cout << i << " " << j << endl;
f[i][j] = min(f[i + 1][j], f[i][j - 1]) + 1;
if (s[i] == s[j]) {
f[i][j] = min(f[i][j], f[i + 1][j - 1]);
}
}
}
return f[0][n - 1];
}
};