第 73 场力扣夜喵双周赛
数组中紧跟 key 之后出现最频繁的数字
题目大意
给你一个nums数组和key,求nums[i] == key && nums[i] == target 的最大次数
换句话就是让你找num[i]==key后面出现一位出现最多的数
思路
直接模拟即可
代码
class Solution {
public:
int mostFrequent(vector<int>& nums, int key) {
int cnt[1010];
memset(cnt, 0, sizeof cnt);
for ( int i = 0; i <= nums.size() - 2; i ++ )
if (nums[i] == key) cnt[nums[i + 1]] ++;
int res,ans = 0;
for ( int i = 1; i <= 1000; i ++ )
{
if (cnt[i] > ans)
{
ans = cnt[i];
res = i;
}
}
return res;
};
};
将杂乱无章的数字排序
题目大意
思路
通过to_string 和 stoi 将结果存在map里最后遍历即可
代码
class Solution {
public:
vector<int> sortJumbled(vector<int>& mapping, vector<int>& nums) {
int n = nums.size();
map<int,vector<int> > mp;
for(int i = 0 ; i < n ; i ++) {
string s = to_string(nums[i]);
for(auto& t:s) t = mapping[t-'0']+'0';
mp[stoi(s)].push_back(nums[i]);
}
vector<int> ans;
for(auto& [x,y] : mp)
for(auto& e : y)
ans.push_back(e);
return ans;
}
};
有向无环图中一个节点的所有祖先
题目大意
思路
bfs每一个点即可
代码
class Solution {
public:
vector<vector<int>> getAncestors(int n, vector<vector<int>>& edges) {
vector<vector<int>> e(n);
for(auto& t:edges) e[t[0]].push_back(t[1]);
auto bfs = [&](int s){
vector<int> d(n);
d[s] = 1;
queue<int> que;
que.push(s);
while(que.size()) {
auto w = que.front(); que.pop();
for(auto v:e[w]){
if(!d[v]) {
d[v] = 1;
que.push(v);
}
}
}
return d;
};
vector<vector<int>> ans(n);
for(int i = 0 ; i < n ; i ++) {
auto d = bfs(i);
for(int j = 0 ; j < n ; j ++){
if(i != j && d[j]) ans[j].push_back(i);
}
}
return ans;
}
};
得到回文串的最少操作次数
题目大意
思路
双指针匹配[i,j]
代码
class Solution {
public:
int minMovesToMakePalindrome(string s) {
int n = s.size(),cnt = 0;
for(int i = 0 , j = n - 1 ; i < n / 2 ; i ++) {
bool find = 0;
for(int k = j ; k > i ; k --) {
if(s[k] == s[i]) {
for(;k < j ; k ++){
swap(s[k],s[k+1]);
cnt ++;
}
find = 1;
--;
break;
}
}
if(!find) {
cnt += n/2-i;
}
}
return cnt;
}
};