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

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. let关键字:加强版的var关键字

    本文首发于个人网站:let关键字:加强版的var关键字 你好,今天大叔想和你唠扯唠扯 ES6 新增的关键字 -- let.再说 let 的具体用法之前,大叔想先和你说说大叔自己对 let 的感受 -- ...

  2. [Usaco2016 Dec]Counting Haybales

    原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=4747 先将原数组排序,然后二分查找即可.时间复杂度\(O((N+Q)logN)\). #i ...

  3. 【IDEA】Lombok--是否值得我们去使用

    官网 https://projectlombok.org/ 简介 Project Lombok is a java library that automatically plugs into your ...

  4. 手写Netty之多路复用Select小案例

    注意:本文只是将上文多路复用器Select.Poll.Epoll区别梳理中提出的概念与Netty中的步骤联系起来,方便后面回顾,代码中注释很多,对于大家来说如果不是怀有同样的目的,不一定有用. 单线程 ...

  5. Lua大量字符串拼接方式效率对比及原因分析

    Lua大量字符串拼接方式效率对比及原因分析_AaronChan的博客-CSDN博客_lua字符串拼接消耗 https://blog.csdn.net/qq_26958473/article/detai ...

  6. 函数式编程 偏函数 生成器 yield

    高阶函数 # 高阶函数def f(x): return x * x# map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Ite ...

  7. gitignore 不起作用的解决办法 不再跟踪 让.gitignore生效,跟踪希望被跟踪的文件

    实践 # https://git-scm.com/docs/gitignore https://git-scm.com/docs/gitignore 不跟踪log目录下的所有文件,但需要保留这个文件夹 ...

  8. spark-submit提交spark任务的具体参数配置说明

    spark-submit提交spark任务的具体参数配置说明 1.spark提交任务常见的两种模式 2.提交任务时的几个重要参数 3.参数说明 3.1 executor_cores*num_execu ...

  9. Spring Cloud与Docker——微服务架构概述

    Spring Cloud与Docker--微服务架构概述 单体应用架构概述 微服务概述 微服务的特性 微服务架构的优点 微服务面临的挑战 微服务的设计原则 单体应用架构概述 传统的服务发布都是采用单体 ...

  10. 阿里云MQ

    阿里云众多中间件服务中有一款非常强大的中间见服务,在企业互联网架构中起到不可替代的作用,相比较开源的RabbitMQ,阿里的消息队列MQ承受的住阿里内部1000+核心应用的使用,每天转几千条消息,稳定 ...