leetcode周赛&&双周赛
双周赛
1.sort有pair可以自动按第二个排序。。。
5217. 将杂乱无章的数字排序
vector<int> sortJumbled(vector<int>& mapping, vector<int>& nums) {
//cout<<nums[0]<<endl;
//cout<<mapping[0]<<endl;
vector<pair<int,int>>a(nums.size());
for(int i=0;i<nums.size();i++)
{
int num=0,shuzi=nums[i],cnt=1;
if(shuzi==0)
{
a[i]={mapping[shuzi%10],i};
//if(i==0)continue;
//cout<<a[0]<<" "<<a[1]<<endl;
// cout<<a[i].first<<" "<<a[i].second<<endl;
continue;
}
while(shuzi)
{
num=num+mapping[shuzi%10]*cnt;
shuzi=shuzi/10;
cnt*=10;
}
//cout<<i<<" "<<num<<endl;
//a[i].first=num;
a[i]={num,i};
//if(i==0)continue;
}
//pair自带比较
sort(a.begin(),a.end());
vector<int>ans(nums.size(),0);
for(int i=0;i<nums.size();i++)
{
ans[i]=nums[a[i].second];
}
return ans;
}
2.我的图论和stl真的好烂(,想出来了不知道咋用(指set)拓扑也想到了,麻,最后还是vector
class Solution {
public:
int n;
vector<vector<int>>ans;
void dfs(int u, vector<vector<int>>& gra,int r,vector<int>&visited)
{
if(visited[u])return;
visited[u]=1;
for(int j=0;j<gra[u].size();j++)
{
if(visited[gra[u][j]])continue;
dfs(gra[u][j],gra,r,visited);
ans[gra[u][j]].push_back(r);
}
}
vector<vector<int>> getAncestors(int n, vector<vector<int>>& edges) {
this->n=n;
ans.resize(n);
vector<vector<int>>gra(n);//graph
vector<int>visited(n,0);
//create graph
for(int i=0;i<edges.size();i++)
{
gra[edges[i][0]].push_back(edges[i][1]);
}
for(int i=0;i<n;i++)
{
fill(visited.begin(),visited.end(),0);
dfs(i,gra,i,visited);
}
return ans;
}
};
3.unordered_map遍历
(以前哪题做过又忘了)
for (auto [i, node] : v)
if (deg[i] == 0)
return node;