[LeetCode周赛复盘] 第 324 场周赛20221218

  • 一、本周周赛总结
  • 二、 [Easy] 6265. 统计相似字符串对的数目
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 三、[Medium] 6266. 使用质因数之和替换后可以取到的最小值
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 四、[Medium] 6267. 添加边使所有节点度数都为偶数
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 五、[Hard] 6268. 查询树中环的长度
    • 1. 题目描述
    • 2. 思路分析
    • 3. 代码实现
  • 六、参考链接

一、本周周赛总结

  • 这周考的还行,4道题多多少少都要点数学。
  • T1 计数+等差数列求和。
  • T2 数论模板,由于质数数组开的不够RE一次。
  • T3 分类讨论。
  • T4 lca。

二、 [Easy] 6265. 统计相似字符串对的数目

链接: 6265. 统计相似字符串对的数目

1. 题目描述

2. 思路分析

  • 题目只要求字符相同,不要求数量,因此set去重,然后排序来归类。

  • 另外,灵神写法是状压,把26个字符压成26位表示出没出现即可。

3. 代码实现

class Solution:def similarPairs(self, words: List[str]) -> int:c = Counter()for w in words:c[''.join(sorted(set(w)))] += 1ans = 0for v in c.values():ans += v*(v-1)//2return ans

三、[Medium] 6266. 使用质因数之和替换后可以取到的最小值

链接: 6266. 使用质因数之和替换后可以取到的最小值

1. 题目描述

2. 思路分析

幸好之前写了个取质因数的模板,直接复制过来按题意要求模拟。

  • 理论上时间复杂度是开方n,注意记忆化写外边。
  • 用欧拉筛预处理质数,然后对每个x分治质因数。

3. 代码实现

直接找质因数,看似2重循环也没判断质数,实际上由于因数从2开始变大,且每次把每个数除完,因此不会取到合数(会实现把这个合数的因子取完),且复杂度就是sqrt(n)。

class Solution:def smallestValue(self, n: int) -> int:while True:x, s, i = n, 0, 2while i * i <= x:while x % i == 0:s += ix //= ii += 1if x > 1: s += xif s == n: return nn = s
def tag_primes_euler(n):  # 返回一个长度n+1的数组p,如果i是质数则p[i]=1否则p[i]=0primes = [1]*(n+1)primes[0] = primes[1] = 0  # 0和1不是质数ps = []  # 记质数for i in range(2,n+1):if primes[i]:ps.append(i)for j in ps:if j*i>n:breakprimes[j*i] = 0if i%j == 0:break# print(ps)return primesprimes = tag_primes_euler(10**5+5)@cache
def get_prime_reasons(x):if x == 1:return Counter()if primes[x]:return Counter([x])for i in range(2,int(x**0.5)+1):if x % i == 0:return get_prime_reasons(i) + get_prime_reasons(x//i) class Solution:def smallestValue(self, n: int) -> int:while n :c = get_prime_reasons(n)s = 0 for k,v in c.items():s += k*vif s == n:return s n = sreturn n

四、[Medium] 6267. 添加边使所有节点度数都为偶数

链接: 6267. 添加边使所有节点度数都为偶数

1. 题目描述

2. 思路分析

  • 直接分类讨论,注意题目提示中最后两个条件。即原图中没有自环和重边,且要求添加后的图也没有。
  • 我们建图后统计原图中的点,有几个奇数度的点x,几个偶数度的点y,把它们分出来。
  • 显然如果没有奇数(x==0),则无需添加,返回True;如果x>=5,因为一条边最多影响2个点,因此仅用2条边无论如何也搞不定,return False.
  • 如果x==1,那么这个仅有的点,连哪个点都不行,会使另外一个偶点的度+1变成奇数。return False。
  • 同理如果x==3,至少要用一条边改变2个点,剩下一个点变成上一种情况。return False。
  • 如果x==2,设这俩点是a,b
    • 若ab不是本来就连着,就可以用一条边连起来,把它俩变偶度,且不影响其他边,return True。
    • 若ab本来就是连着呢,考虑找一个原本的偶度点c,且不连接a,b,把a,b都连c,return True。
  • 如果x==4,那么用两条边只能两两相连,找出任意匹配方式,即匹配的两点不互相连接即可。

3. 代码实现

class Solution:def isPossible(self, n: int, edges: List[List[int]]) -> bool:g = [set() for _ in range(n)]for u,v in edges:u-=1v-=1g[u].add(v)g[v].add(u)ji,ou = [],[]for u in range(n):if len(g[u]) & 1:ji.append(u)else:ou.append(u)if len(ji)>=5:return Falseif not ji :return Trueif len(ji)&1:return Falseif len(ji) == 2:a,b = jiif a not in g[b]:return Truefor u in ou:if u not in g[a] and u not in g[b]:return Truereturn Falseif len(ji) == 4:a,b,c,d = jiif a not in g[b] and c not in g[d]:return Trueif a not in g[c] and b not in g[d]:return Trueif a not in g[d] and c not in g[b]:return Truereturn False

五、[Hard] 6268. 查询树中环的长度

链接: 6268. 查询树中环的长度

1. 题目描述

2. 思路分析

  • 比赛时看到lca吓一跳,因为确实没学会树上倍增,然后仔细看数据范围原来是完全二叉树:
  • 那么树高不会超过30,每个询问分开向根节点走即可。
  • 由于是完全二叉树,找父节点很方便;参考线段树的数组表示。

  • 那么做法就是两个节点都向上走,找到第一个相同的祖宗节点,然后计算总距离+1即可。
  • 实现时,令a<b,这样好考虑一些。

  • 正经LCA做法,每次让更深的那个向上搜索。

3. 代码实现

正经LCA

class Solution:def cycleLengthQueries(self, n: int, queries: List[List[int]]) -> List[int]:def calc(a,b):            ans = 1while a!=b:if a > b:a,b = b,a ans += 1b //= 2return ansreturn [calc(a,b) for a,b in queries]
class Solution:def cycleLengthQueries(self, n: int, queries: List[List[int]]) -> List[int]:m = len(queries)ans = []def calc(a,b):if a > b:a,b = b,as,p = set(),[]while a:s.add(a)a //= 2while b:if b in s:return len(p) + len([a for a in s if a>b])+1p.append(b)b //= 2for a,b in queries:ans.append(calc(a,b))return ans

两个点同时走

class Solution:def cycleLengthQueries(self, n: int, queries: List[List[int]]) -> List[int]:def calc(a,b):            if a > b:a,b = b,as,p = set(),0            while b:if a:s.add(a)a //= 2if b in s:return p + len([a for a in s if a>b])+1p += 1b //= 2return preturn [calc(a,b) for a,b in queries]

六、参考链接

[LeetCode周赛复盘] 第 324 场周赛20221218相关推荐

  1. [LeetCode周赛复盘] 第 314 场周赛20221009

    [LeetCode周赛复盘] 第 314 场周赛20221009 一.本周周赛总结 二. [Easy] 6201. 找出前缀异或的原始数组 1. 题目描述 2. 思路分析 3. 代码实现 三.[Eas ...

  2. [LeetCode周赛复盘] 第 310 场周赛20220911

    [LeetCode周赛复盘] 第 310 场周赛20220911 一.本周周赛总结 二. [Easy] 6176. 出现最频繁的偶数元素 1. 题目描述 2. 思路分析 3. 代码实现 三.[Medi ...

  3. [acwing周赛复盘] 第 91 场周赛20230218

    [acwing周赛复盘] 第 91 场周赛20230218 一.本周周赛总结 二. 4861. 构造数列 1. 题目描述 2. 思路分析 3. 代码实现 三.4862. 浇花 1. 题目描述 2. 思 ...

  4. [LeetCode周赛复盘] 第 89 场双周赛20221015

    [LeetCode周赛复盘] 第 89 场双周赛20221015 一.本周周赛总结 二. [Easy] 6208. 有效时间的数目 1. 题目描述 2. 思路分析 3. 代码实现 三.[Medium] ...

  5. 【力扣周赛】第349场周赛

    [力扣周赛]第349场周赛 6470. 既不是最小值也不是最大值 题目描述 解题思路 6465. 执行子串操作后的字典序最小字符串 题目描述 解题思路 6449. 收集巧克力 题目描述 解题思路 64 ...

  6. 【力扣周赛】第342场周赛

    [力扣周赛]第342场周赛 6387:计算列车到站时间 题目描述 解题思路 6391:倍数求和 题目描述 解题思路 6390:滑动子数组的美丽值 题目描述 解题思路 6392:使数组所有元素变成1的最 ...

  7. 【力扣周赛】第343场周赛

    [力扣周赛]第343场周赛 2660:保龄球游戏的获胜者 题目描述 解题思路 2661:找出叠涂元素 题目描述 解题思路 2660:保龄球游戏的获胜者 题目描述 描述:给你两个下标从 0 开始的整数数 ...

  8. 【力扣周赛】第345场周赛

    [力扣周赛]第345场周赛 6430: 找出转圈游戏输家 题目描述 解题思路 6431: 相邻值的按位异或 题目描述 解题思路 6433: 矩阵中移动的最大次数 题目描述 解题思路 6432: 统计完 ...

  9. 【力扣周赛】第340场周赛

    [力扣周赛]第340场周赛 6361:对角线上的质数 题目描述 解题思路 6360:等值距离和 题目描述 解题思路 6361:对角线上的质数 题目描述 描述:给你一个下标从 0 开始的二维整数数组 n ...

最新文章

  1. 什么是CUDA编程 统一计算架构
  2. VirtualBox——在Win7的HOST上安装配置虚拟机CentOS7
  3. zzuli oj 1167逆转数(指针专题)
  4. memcached服务器搭建(RedHat5)
  5. 点云格式解读 PCD
  6. 解决IE正常模式与兼容性模式的办法
  7. phpword中设置间距_管道支、吊架的安装间距规范上如何规定?
  8. c++primer 5th第15章基础、课后习题自己解析、心得体会等
  9. Google, 请不要离开我们!
  10. 小度智能音箱维修点_小度智能音箱无法唤醒怎么办
  11. web文件服务器 开源,10个开源的基于WEB的文件管理器
  12. 老旧小区安防升级改造有机遇也有难度
  13. html中展开的小箭头,HTML5 移动网页应用中的展开式标签(带上下指示箭头)
  14. 0017-Spark的HistoryServer不能查看到所有历史作业分析
  15. 计算机的各种配件知识,菜鸟必读:DIY装机需要知道的一些配件小知识
  16. RGB在线取色器,可视化三通道颜色
  17. 计算机在未来对人类生活的影响,日常生活中计算机技术的发展对我们的影响
  18. 如何将计算机恢复到桌面快捷方式,怎样还原电脑系统默认的Windows快捷方式及其图标呀?...
  19. C语言 大赛现场统分
  20. echarts 饼图标签过多导致显示不全

热门文章

  1. C语言程序设计--输入一行文字,统计其中英文字母(大小写),空格,数字,其他字符的数目
  2. unity中打开网页
  3. 机器人工程毕业设计☞外文翻译
  4. 水稻PHP基因,厦门大学Genome Res解析水稻基因调控机制
  5. C语言学习--初始C语言02
  6. Python中的多态如何理解?
  7. 普及一个数分的领域,可能对你有用
  8. C++之文本查询系统
  9. android touch事件无反应,移动端touch事件
  10. 看世界杯前VS看世界杯后(6-21更)