第四题比较难,看题解用并查集做比较简单,但是我觉得难度在想到用并查集,可能是最近做题少所以想不到吧。

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的更多相关文章

  1. LeetCode周赛#205

    5508. 数的平方等于两数乘积的方法数 #模拟 #哈希表 题目链接 题意 给你两个整数数组nums1 和 nums2 ,请你返回根据以下规则形成的三元组的数目(类型 1 和类型 2 ): 类型 1: ...

  2. 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)

    Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...

  3. 【一天一道LeetCode】#205. Isomorphic Strings

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...

  4. Baozi Leetcode Solution 205: Isomorphic Strings

    Problem Statement Given two strings s and t, determine if they are isomorphic. Two strings are isomo ...

  5. 拼写单词[哈希表]----leetcode周赛150_1001

    题目描述: 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我 ...

  6. 【Leetcode周赛】从contest-41开始。(一般是10个contest写一篇文章)

    Contest 41 ()(题号) Contest 42 ()(题号) Contest 43 ()(题号) Contest 44 (2018年12月6日,周四上午)(题号653—656) 链接:htt ...

  7. 【Leetcode周赛】从contest-51开始。(一般是10个contest写一篇文章)

    Contest 51 (2018年11月22日,周四早上)(题号681-684) 链接:https://leetcode.com/contest/leetcode-weekly-contest-51 ...

  8. 【Leetcode周赛】从contest-71开始。(一般是10个contest写一篇文章)

    Contest 71 () Contest 72 () Contest 73 (2019年1月30日模拟) 链接:https://leetcode.com/contest/weekly-contest ...

  9. 【Leetcode周赛】从contest-81开始。(一般是10个contest写一篇文章)

    Contest 81 (2018年11月8日,周四,凌晨) 链接:https://leetcode.com/contest/weekly-contest-81 比赛情况记录:结果:3/4, ranki ...

随机推荐

  1. ctfshow—web—web3

    打开靶机 提示是文件包含漏洞 测试成功 https://d7c9f3d7-64d2-4110-a14b-74c61f65893c.chall.ctf.show/?url=../../../../../ ...

  2. postgresql中权限介绍

    postgresql权限分为实例的权限,数据库的权限,模式的权限,对象的权限,表空间的权限 实例的权限:由pg_hba.conf文件控制,控制那些用户那些IP以哪种方式连接数据库 数据库的权限:是否允 ...

  3. 利用sklearn进行字典&文本的特征提取

    写在前面 这篇博客主要内容: 应用DictVectorizer实现对类别特征进行数值化.离散化 应用CountVectorizer实现对文本特征进行数值化 特征提取API sklearn.featur ...

  4. JavaScript——深入了解this

    前言 我曾以为func()其实就是window.func() function func(){ console.log('this : ' + this); } func();//this : [ob ...

  5. 备份和还原Windows DHCP服务器

    在本教程中,您将学习如何使用DHCP控制台和PowerShell备份和还原Windows DHCP服务器. 您是否曾经经历过DHCP服务器崩溃或故障?在设备开始重新启动之前,一切都会平静. 用户将抱怨 ...

  6. 转 8 jmeter之集合点

    8 jmeter之集合点   集合点:集合点用以同步虚拟用户,以便恰好在同一时刻执行任务.在测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中可以通过在提交数据操作 ...

  7. IDEA SSM+MAVEN+JWT 图书管理系统

    压缩包内含有MAVEN,TOMCAT,需要手动对IDEA进行配置.同时也包含数据库文件. 项目搭载了swagger,可以方便地对接口进行测试 在开发的过程中我也进行了一些记录,可以参考https:// ...

  8. 如何用OKR促进跨团队协同

    https://mp.weixin.qq.com/s/347dKRlez0_KJKGOkTI0AQ

  9. python基础(数据类型,while,if)

    python基础初识. 1,运行python代码. 在d盘下创建一个t1.py文件内容是: print('hello world') 打开windows命令行输入cmd,确定后 写入代码python ...

  10. 七:SpringBoot-集成Redis数据库,实现缓存管理

    SpringBoot-集成Redis数据库,实现缓存管理 1.SpringBoot集成Redis 1.1 核心依赖 1.2 配置文件 1.3 简单测试案例 1.4 自定义序列化配置 1.5 序列化测试 ...