【力扣周赛#324】6266. 使用质因数之和替换后可以取到的最小值+6267. 添加边使所有节点度数都为偶数+6268. 查询树中环的长度
目录
6265. 统计相似字符串对的数目 - ac
6266. 使用质因数之和替换后可以取到的最小值
分解质因数
1、tle代码
2、优化ac代码
6267. 添加边使所有节点度数都为偶数 - 建图+分类讨论
关于建图
6268. 查询树中环的长度 - LCA最近公共祖先
6265. 统计相似字符串对的数目 - ac
class Solution {
public:int similarPairs(vector<string>& words) {int res=0;for(int i=0;i<words.size()-1;i++){set<char>s1;for(int j=0;j<words[i].size();j++) s1.insert(words[i][j]);for(int j=i+1;j<words.size();j++) {set<char>s2;for(int k=0;k<words[j].size();k++) s2.insert(words[j][k]);if(s1==s2) res++;}}return res;}
};
6266. 使用质因数之和替换后可以取到的最小值
分解质因数
for(int i=2;i<=x/i;i++)if(x%i==0) //i一定是质数{int cnt=0;while(x%i==0) x/=i,cnt++;cout<<i<<' '<<cnt<<endl; //输出质因数 次方数}
if(x>1) cout<<x<<' '<<1<<endl;
1、tle代码
思路大体是对的 但是搞错了题目一个点
当某数的质因数为1 和本身时 质因数之和=本身
我当时想成 质因数之和=1+本身了 1不是质数!!!
class Solution {
public:bool isprime(int x){if(x<2) return false;for(int i=2;i<=x/i;i++)if(x%i==0) return false;return true;} int smallestValue(int n) {int minx=0x3f3f3f3f;int sum=n;if(isprime(n)) return n;while(true){n=sum;if(isprime(n)) break;sum=0;for(int i=2;i<=n/i;i++){int cnt=0;if(n%i==0){while(n%i==0) n/=i,cnt++;}while(cnt--) sum+=i;}if(n>1) sum+=n;minx=min(minx,sum);}return minx;}
};
2、优化ac代码
class Solution {
public:int yin(int n){int sum=0;for(int i=2;i<=n/i;i++)if(n%i==0){while(n%i==0) n/=i,sum+=i;}if(n>1) sum+=n;return sum;}int smallestValue(int n) {int cnt=0;while(true){int x=yin(n);if(x==n) break;n=x;}return cnt;}
};
class Solution {
public:int smallestValue(int n) {int t;while(true){t=n;int num=0;for(int i=2;i<=n/i;i++){if(n%i==0){while(n%i==0) n/=i,num+=i;}}if(n>1) num+=n;if(t==num) break;n=num;}return t;}
};
6267. 添加边使所有节点度数都为偶数 - 建图+分类讨论
6267. 添加边使所有节点度数都为偶数
思路:
- 先统计奇度数点 存序号
- 分类讨论可能满足条件的情况
- 如果奇度数点==0 则不用连直接return true
- 如果奇度数点==2
如果两点间没有连线 则只要连接这两个点就true
如果两点间有连线 则找出一个除a b点外的点c 如果该点和a b都没有连线 则两条边可以c-a 和c-b 也true
- 如果奇度数点==4 如果两两可以相连则true(满足任意一种两两相连情况)
- 除以上情况外都为false
关于建图
- 本题用map存图 map<PII,int> e
- e[{a,b}]=e[{b,a}]=1 无向图 a b点间有连线
- 判断a b点间是否相连 e.count({a,b})
class Solution {
public:static const int N=1e5+10;bool isPossible(int n, vector<vector<int>>& edges) {int d[N]={0};map<pair<int,int>,int> e;for(vector<int>& x:edges){int a=x[0],b=x[1];d[a]++,d[b]++;e[{a,b}]=e[{b,a}]=1;}vector<int> v;for(int i=1;i<=n;i++) if(d[i]%2) v.push_back(i);if(v.size()==0) return true;else if(v.size()==2){int a=v[0],b=v[1];if(!e.count({a,b})) return true; //如果a b两点间不存在连线 则将两点相连即可//否则找一个偶度数节点分别连接a和b 这样偶度数+2还是偶数 两个奇度数点+1也是偶数for(int i=1;i<=n;i++) if(i!=a&&i!=b&&!e.count({i,a})&&!e.count({i,b})) return true;}else if(v.size()==4){int a=v[0],b=v[1],c=v[2],d=v[3];//如果四个点能两两相连 满足任意一种情况即可 否则falseif(!e.count({a,b})&&!e.count({c,d})) return true;if(!e.count({a,c})&&!e.count({b,d})) return true;if(!e.count({a,d})&&!e.count({b,c})) return true; }return false;}
};
6268. 查询树中环的长度 - LCA最近公共祖先
6268. 查询树中环的长度
对于两个点 a 和 b,每次把深度更深的点往父节点移一步,直到它们走到同一个点,即可求ab两点到LCA距离之和
环长度 = ab两点到LCA距离之和+1
思路:
- 因为是完全二叉树 所以深度和节点序号很规律 某节点序号/2就是父节点
环可以看成是从 a 出发往上走,在某个位置「拐弯」,往下走到 b。
这个拐弯的地方就是 a 和 b 的最近公共祖先LCA。
- 第一个图 5和3相连 则它们的LCA是1 环长度=5到1距离+3到1距离+1
如何找LCA?
不断循环,每次循环比较 a 和 b 的大小:
如果 a>b,则 a 的深度大于等于 b 的深度,那么把 a 移动到其父节点,即 a=a/2;
如果 a<b,则 a 的深度小于等于 b 的深度,那么把 b 移动到其父节点,即 b=b/2;
如果 a=b,则找到了LCA,退出循环。
class Solution {
public:vector<int> cycleLengthQueries(int n, vector<vector<int>>& q) {vector<int> ans;for(int i=0;i<q.size();i++){int res=1;int a=q[i][0],b=q[i][1];while(a!=b){a>b? a/=2:b/=2;res++;}ans.push_back(res);}return ans;}
};
【力扣周赛#324】6266. 使用质因数之和替换后可以取到的最小值+6267. 添加边使所有节点度数都为偶数+6268. 查询树中环的长度相关推荐
- LeetCode 第 58 场力扣夜喵双周赛(动态规划、马拉车算法,前后缀处理)/ 第 253 场力扣周赛(贪心,LIS)
第 58 场力扣夜喵双周赛 两道600多 5193. 删除字符使字符串变好 题目描述 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 ...
- 【力扣周赛】第342场周赛
[力扣周赛]第342场周赛 6387:计算列车到站时间 题目描述 解题思路 6391:倍数求和 题目描述 解题思路 6390:滑动子数组的美丽值 题目描述 解题思路 6392:使数组所有元素变成1的最 ...
- 【力扣周赛】第340场周赛
[力扣周赛]第340场周赛 6361:对角线上的质数 题目描述 解题思路 6360:等值距离和 题目描述 解题思路 6361:对角线上的质数 题目描述 描述:给你一个下标从 0 开始的二维整数数组 n ...
- 【力扣周赛】第346场周赛
[力扣周赛]第346场周赛 6439. 删除子串后的字符串最小长度 题目描述 解题思路 6454. 字典序最小回文串 题目描述 解题思路 6441. 求一个整数的惩罚数 题目描述 解题思路 6439. ...
- 第二次力扣周赛:排名149 / 2046;在完赛边缘打转(总结了5点,实力还不够)
前言: 上午10:30 - 12:00 第二次力扣周赛,最后一题也写完了,但是没有通过.完成了 3 / 4 的题,排名 149 / 2046. 赛题:https://leetcode-cn.com/c ...
- 第 304 场力扣周赛
1.Introduction 平常做代码题目较少,今天迟迟不能入睡,我思考了下,确实有很大概率,对十年内做的目标,有很大可能不能实现.于是做了几道题勉强让自己心安.一边喝着牛栏山壮精神,一边写Leet ...
- 第 270 场力扣周赛
第一百一十二天 --- 第 270 场力扣周赛 题目一 思路:直接模拟 细节 代码 附加 题目二 思路 细节 代码 题目一 力扣:2094. 找出 3 位偶数 思路:直接模拟 1.因为构造所有三位数, ...
- 第 256 场力扣周赛(状态压缩+dp,二进制子序列的动规、940)
第 256 场力扣周赛 有事没做,来看一下题 5854. 学生分数的最小差值 题目描述 给你一个 下标从 0 开始 的整数数组 nums ,其中 nums[i] 表示第 i 名学生的分数.另给你一个整 ...
- 力扣周赛310场题解
力扣周赛310场题解 前言 6176. 出现最频繁的偶数元素 6177. 子字符串的最优划分 前言 今天参加了力扣的第310场周赛,也是感觉到了这周的题的一个难度,有些题有想法,但是实际上让我去写的时 ...
最新文章
- linux脚本自定义赋值,JMeter——运用BeanShell给自定义的变量动态赋值
- AJAX技术其实就是多年前我就使用过的XMLHTTP
- netstat 查看端口命令
- 使用jackson转换类型时报Unrecognized field
- 我的notepad++
- java 反射解析xml_java反射获取xml元素
- linux库引入之动态库静态库(生成和使用)
- 网络基础3-1(细谈IP协议头, 网络层,子网划分,路由选择,数据链路层,以太网帧格式,MAC地址,再谈ARP协议)
- php微信拍照图库js接口,ThinkPHP微信实例——JSSDK图像接口多张图片上传下载并将图片流写入本地...
- linux远程日志rsyslog服务端和客户端安装(亲测)--自定义接收日志格式
- 无悔入华夏怎么一直显示服务器,无悔入华夏祭祀玩法怎么玩 无悔入华夏祭祀怎么触发?...
- excel pandas 空格_pandas 实现 Excel 常见操作 (1)
- 十字绣图下载_十字绣与编程有什么关系? 比你想象的更多
- html 游戏 消消乐,html5叠房子消消乐小游戏代码
- 求职时,怎样判断一家公司是否靠谱?
- 爬虫大作业~以爬取hao123漫画为例
- ovs-vsctl设置ofport不成功处理
- 通过刷DD-WRT固件的路由器访问猫
- log4j2的一些配置,为某个类某个方法单独文件打印日志,定时删除日志和springboot的logback日志单独类打印
- 世界正游弋于开源之海,但只有 Red Hat 从中盈利