leetcode 周赛 205 1576-5508-5509-5510
第四题比较难,看题解用并查集做比较简单,但是我觉得难度在想到用并查集,可能是最近做题少所以想不到吧。
1 替换所有的问号
class Solution {
public:
string modifyString(string s) {
int n=s.size();
int last='a';
int cnt=1;
for(int i=0;i<n;i++){
if(s[i]=='?'){
s[i]=(last+1-'a')%26+'a';
if(i!=0){
while(s[i]==s[i-1])
s[i]=(s[i]+1-'a')%26+'a';
}
if(i!=n-1){
while(s[i]==s[i+1])
s[i]=(s[i]+1-'a')%26+'a';
}
last=s[i];
}
else
continue;
}
return s;
}
};
2 数的平方等于两数乘积的方法数
2.1 stl
class Solution {
public:
int numTriplets(vector<int>& nums1, vector<int>& nums2) {
map<long long,int> ma;
for (int i=0;i<nums1.size();i++){
for (int j=i+1;j<nums1.size();j++){
ma[1LL*nums1[i]*nums1[j]]++;
}
}
int res=0;
for (int i=0;i<nums2.size();i++){
res+=ma[1LL*nums2[i]*nums2[i]];
}
ma.clear();
for (int i=0;i<nums2.size();i++){
for (int j=i+1;j<nums2.size();j++){
ma[1LL*nums2[i]*nums2[j]]++;
}
}
for (int i=0;i<nums1.size();i++){
res+=ma[1LL*nums1[i]*nums1[i]];
}
return res;
}
};
2.2 粗暴一点
class Solution {
public:
int numTriplets(vector<int>& nums1, vector<int>& nums2) {
int ans=0;
if(nums1.size()<2&&nums2.size()<2){
return 0;
}
vector<long long>q1;
vector<long long>q2;
vector<long long>ch1;
vector<long long>ch2;
for(int i=0;i<nums1.size();i++){
q1.push_back((long long)nums1[i]*(long long)nums1[i]);
}
for(int i=0;i<nums2.size();i++){
q2.push_back((long long)nums2[i]*(long long)nums2[i]);
}
for(int i=0;i<nums1.size();i++)
for(int j=i+1;j<nums1.size();j++)
{
ch1.push_back((long long)nums1[i]*(long long)nums1[j]);
}
for(int i=0;i<nums2.size();i++)
for(int j=i+1;j<nums2.size();j++)
{
ch2.push_back((long long)nums2[i]*(long long)nums2[j]);
}
sort(q1.begin(),q1.end());
sort(q2.begin(),q2.end());
sort(ch1.begin(),ch1.end());
sort(ch2.begin(),ch2.end());
int i=0,j=0;
int cnt1=0,cnt2=0;
while(i<q1.size()&&j<ch2.size()){
if(q1[i]==ch2[j]){
cnt1++,cnt2++;
while(i+1<q1.size()&&q1[i+1]==q1[i])
{
cnt1++,i++;
}
while(j+1<ch2.size()&&ch2[j+1]==ch2[j])
{
cnt2++,j++;
}
i++,j++;
ans=ans+cnt1*cnt2;
cnt1=0,cnt2=0;
}
else if(q1[i]<ch2[j])
{
cnt1=0,cnt2=0;
i++;
}
else{
j++;
cnt1=0,cnt2=0;
}
}
i=0,j=0;
cnt1=0,cnt2=0;
while(i<q2.size()&&j<ch1.size()){
if(q2[i]==ch1[j]){
cnt1++,cnt2++;
while(i+1<q2.size()&&q2[i+1]==q2[i])
{
cnt1++,i++;
}
while(j+1<ch1.size()&&ch1[j+1]==ch1[j])
{
cnt2++,j++;
}
i++,j++;
ans=ans+cnt1*cnt2;
cnt1=0,cnt2=0;
}
else if(q2[i]<ch1[j])
{
i++;
}
else
j++;
}
return ans;
}
};
3 避免重复字母的最小删除成本
class Solution {
public:
int minCost(string s, vector<int>& cost) {
int temp=cost[0];
int ans=0;
for(int i=1;i<s.size();i++){
if(s[i]==s[i-1]){
if(temp>cost[i])
ans+=cost[i];
else
{
ans+=temp;
temp=cost[i];
}
}
else
temp=cost[i];
}
return ans;
}
};
4 保证图可完全遍历
并查集。
先跑一边公共边,统计保留边数量nums,再分别跑各自边剩下的数量numa,numb。去掉的边是有相同父亲的边。
当nums+numsb=n-1,说明恰好遍历。否则不能遍历
// 参考 wyj20154348 的题解
class Solution {
public:
int fa[100010];
int tempfa[100010];
int tfind(int x){
if (fa[x]==x) return x;
return fa[x]=tfind(fa[x]);
}
vector<vector<int>> edge[4];
int maxNumEdgesToRemove(int n, vector<vector<int>>& edges) {
for (int i=0;i<=n;i++) fa[i]=i;
for (int i=0;i<edges.size();i++){
edge[edges[i][0]].push_back(edges[i]);
}
int ans=0;
int numa=0,numb=0;
int num=0;
for (int i=0;i<edge[3].size();i++){
int rootu=tfind(edge[3][i][1]);
int rootv=tfind(edge[3][i][2]);
if (rootu==rootv){
ans++;
continue;
}
num++;
fa[rootu]=rootv;
}
numa=numb=num;
for (int i=0;i<=n;i++) tempfa[i]=fa[i];
for (int i=0;i<edge[2].size();i++){
int rootu=tfind(edge[2][i][1]);
int rootv=tfind(edge[2][i][2]);
if (rootu==rootv){
ans++;
continue;
}
numb++;
fa[rootu]=rootv;
}
for (int i=0;i<=n;i++) fa[i]=tempfa[i];
for (int i=0;i<edge[1].size();i++){
int rootu=tfind(edge[1][i][1]);
int rootv=tfind(edge[1][i][2]);
if (rootu==rootv){
ans++;
continue;
}
numa++;
fa[rootu]=rootv;
}
if (numa!=(n-1)||(numb!=n-1)) return -1;
return ans;
}
};
leetcode 周赛 205 1576-5508-5509-5510的更多相关文章
- LeetCode周赛#205
5508. 数的平方等于两数乘积的方法数 #模拟 #哈希表 题目链接 题意 给你两个整数数组nums1 和 nums2 ,请你返回根据以下规则形成的三元组的数目(类型 1 和类型 2 ): 类型 1: ...
- 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)
Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...
- 【一天一道LeetCode】#205. Isomorphic Strings
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...
- Baozi Leetcode Solution 205: Isomorphic Strings
Problem Statement Given two strings s and t, determine if they are isomorphic. Two strings are isomo ...
- 拼写单词[哈希表]----leetcode周赛150_1001
题目描述: 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我 ...
- 【Leetcode周赛】从contest-41开始。(一般是10个contest写一篇文章)
Contest 41 ()(题号) Contest 42 ()(题号) Contest 43 ()(题号) Contest 44 (2018年12月6日,周四上午)(题号653—656) 链接:htt ...
- 【Leetcode周赛】从contest-51开始。(一般是10个contest写一篇文章)
Contest 51 (2018年11月22日,周四早上)(题号681-684) 链接:https://leetcode.com/contest/leetcode-weekly-contest-51 ...
- 【Leetcode周赛】从contest-71开始。(一般是10个contest写一篇文章)
Contest 71 () Contest 72 () Contest 73 (2019年1月30日模拟) 链接:https://leetcode.com/contest/weekly-contest ...
- 【Leetcode周赛】从contest-81开始。(一般是10个contest写一篇文章)
Contest 81 (2018年11月8日,周四,凌晨) 链接:https://leetcode.com/contest/weekly-contest-81 比赛情况记录:结果:3/4, ranki ...
随机推荐
- ABAP-ALV-如何去掉OO方法中的ALV的标准按钮
SAP在做报表开发中,不同公司对报表的风格往往各异,为此经常在使用OO方法做ALV报表中需要去掉自带的工具栏而自行添加一些工具按钮,下面将简单介绍一些其实现过程与原理: 步骤一: DATA : gt_ ...
- STGAN: A Unified Selective Transfer Network for Arbitrary Image Attribute Editing 阅读笔记和pytorch代码解读
一.论文采用的新方法 1.AttGan中skip connect的局限性 由于encoder中对特征的下采样实际上可能损失部分特征,我们在decoder中进行上采样和转置卷积也无法恢复所有特征,因此A ...
- SpringMVC下关于静态资源访问
SpringMVC静态资源访问 聊一聊关于静态资源的访问问题 首先,我们要对web.xml里面的DispatcherServlet进行设置 <!-- 中央调度器--> <servle ...
- CSS Color Adjustment Module Level 1
CSS Color Adjustment Module Level 1 https://drafts.csswg.org/css-color-adjust-1/ DarkMode 适配指南 | 微信开 ...
- Why should I avoid blocking the Event Loop and the Worker Pool?
Don't Block the Event Loop (or the Worker Pool) | Node.js https://nodejs.org/en/docs/guides/dont-blo ...
- 函数式编程 偏函数 生成器 yield
高阶函数 # 高阶函数def f(x): return x * x# map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Ite ...
- windows IOCP 实践
关于 windows IOCP 有人说 windows IOCP 是 windows 上最好的东西. IOCP 是真正的异步 IO,意味着每次发起一个 IO 请求,该调用本身则立即返回, 而包括 IO ...
- 「笔记」AC 自动机
目录 写在前面 定义 引入 构造 暴力 字典图优化 匹配 在线 离线 复杂度 完整代码 例题 P3796 [模板]AC 自动机(加强版) P3808 [模板]AC 自动机(简单版) 「JSOI2007 ...
- Vue3(三)CND + ES6的import + 工程化的目录结构 = 啥?
突发奇想 这几天整理了一下vue的几种使用方式,对比之后发现有很多相似之处,那么是不是可以混合使用呢?比如这样: vue的全家桶和UI库,采用传统的方式加载(CND.script). 自己写的js代码 ...
- Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署
一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...