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

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. 【葵花宝典】lvs+keepalived部署kubernetes(k8s)高可用集群

    一.部署环境 1.1 主机列表 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 lvs-keepal ...

  2. [Usaco2015 dec]Breed Counting

    原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=4397 用线段树维护区间和即可.时间复杂度\(O((N+Q)logN)\). #includ ...

  3. LSM(Log Structured Merge Trees ) 笔记

    目录 一.大幅度制约存储介质吞吐量的原因 二.传统数据库的实现机制 三.LSM Tree的历史由来 四.提高写吞吐量的思路 4.1 一种方式是数据来后,直接顺序落盘 4.2 另一种方式,是保证落盘的数 ...

  4. uni-app调用wifi接口

    微信小程序条件渲染 在小程序app.json中添加 需要先获取位置信息 "permission": { "scope.userLocation": { &quo ...

  5. uni-app开发经验分享五: 解决三端页面兼容问题的方法

    在做uni-app开发的过程中,我们最头疼可能不是开发的过程中的逻辑,而是最后要做的三端兼容测试和修改,在我开发的项目中,这一步都是最头疼和令人头秃的过程,这里总结一些个人开发遇到的问题,希望对大家有 ...

  6. Less中Css预处理器

    Less.js 安装 npm install -g less 变量 basic 变量采用@进行变量定义.变量可以直接参加运算. @width:100px; .variables{ width:@wid ...

  7. 转 7 jmeter之参数化

    7 jmeter之参数化   badboy里参数化(前面4 jmeter badboy脚本开发技术详解已讲过) jmeter里参数化-1 用户参数 1.打开badboy工具,点击红色按钮开始录制,在地 ...

  8. Java 从Character和char的区别来学习自动拆箱装箱

    本文结构 1.Character和char 的区别: 2.自动拆箱装箱 1.Character和char 的区别: Character是类,char基本数据类型. 在java中有三个类负责对字符的操作 ...

  9. 使用Robo 3T访问MongoDB数据库

    使用Robo 3T操作MongoDB数据库教程:https://blog.csdn.net/baidu_39298625/article/details/99654596 在IDEA中用三个jar包链 ...

  10. PostgreSQL创建只读权限的用户

    1.创建只读角色 CREATE ROLE readaccess; 2.授予对现有表的访问权限 GRANT USAGE ON SCHEMA public TO readaccess; GRANT SEL ...