LeetCode双周赛73(Cpp+Golang)
竞赛 - 力扣 (LeetCode)
6024. 数组中紧跟 key 之后出现最频繁的数字
题意:
给定一个数组,要求找出所有在key之后出现的数字当中,频数最高的那个数
思路:
用一个map保存出现次数,遍历一遍之后返回结果
代码(Cpp):
class Solution {public: int mostFrequent(vector& nums, int key) { mapmp; int id=0,maxx=0; for(int i=1;imaxx){ maxx=mp[nums[i]]; id=nums[i]; }} } return id; }};
5217. 将杂乱无章的数字排序
题意:
给定一个数组和一个映射规则,要求将数组中的数字转换为映射之后的数字,进行排序,根据映射值的大小排序原数组的值,要求是一个稳定的排序,即相同映射值的数据相对位置不变。
思路:
直接模拟,转换成字符串,根据映射替换,求出映射值,然后排序,用一个结构体保存原数据、映射值、原位置。
代码(Cpp):
struct node{ int val,id,org; bool operator<(node b){ if (val==b.val)return id<b.id; return val<b.val; }};class Solution {public: vector sortJumbled(vector& mapping, vector& nums) { vectorp(nums.size()); int n=nums.size(); for(int i=0;i<n;i++){ stringstream ss; string s; ss<>s; int r=0; for(int i=0;i<s.size();i++){ r=r*10+mapping[s[i]-'0']; } p[i].val=r,p[i].id=i,p[i].org=nums[i]; } sort(p.begin(),p.end()); for(int i=0;i<n;i++){ nums[i]=p[i].org; } return nums; }};
5300. 有向无环图中一个节点的所有祖先
题意:
给定一个有向无环图,要求找出该节点的所有祖先。
思路:
这题比赛过程中没有做出来。思路来源榜一大哥。
利用 bitset 进行化简运算,对于条有向边,用a[i] |= a[k] 表示将 k 的所有父节点赋值到 i 结点上,最后根据操作结果将所有节点的祖先保存为二维数组并返回。
代码author:
wwwwoddddhttps://leetcode-cn.com/u/wwwwodddd/
代码(Cpp):
class Solution {public: vector<vector> getAncestors(int n, vector<vector>& e) { bitset a[1000]; for (int i = 0; i < e.size(); i++) { a[e[i][0]][e[i][1]] = 1; } for (int k = 0; k < n; k++) { for (int i = 0; i < n; i++) { if (a[i][k]) { a[i] |= a[k]; } } } vector<vector > z; for (int i = 0; i < n; i++) { vector b; for (int j = 0; j < n; j++) { if (a[j][i]) { b.push_back(j); } } z.push_back(b); } return z; }};
5237. 得到回文串的最少操作次数
题意:
给定一个字符串,每次操作是交换相邻的两个字符,要求用最少的次数使得该字符串变成回文串。
思路一:
贪心。没做出来,根据TsReaper的题解
每次将第一个字符固定,从末端寻找相同字符,移到当前状态的末端。下一次从前端第二个字符开始,重复该算法。以此将问题分割成一系列子问题。如果找不到,就要将当前首字符移动到字符串的中间位置。
代码一(Golang):
func minMovesToMakePalindrome(s string) int { n,ans:=len(s),0 sb:=make([]byte,n) for i:=range s{ sb[i]=s[i] } for i,j:=0,n-1;i<j;i++{ for k:=j;i!=k;k--{ if sb[i]==sb[k]{ for ;k<j;k++{ sb[k],sb[k+1]=sb[k+1],sb[k] ans++ } } } ans+=n-i+1 }}
思路二:
根据zerotrac的题解。将问题转换为一个逆序对问题,用树状数组求解。