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

news2024/9/25 0:33:35

[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去重,然后排序来归类。

3. 代码实现

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

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

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

1. 题目描述

在这里插入图片描述

2. 思路分析

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

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

3. 代码实现

def tag_primes_euler(n):  # 返回一个长度n+1的数组p,如果i是质数则p[i]=1否则p[i]=0
    primes = [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:
                break
            primes[j*i] = 0
            if i%j == 0:break
    # print(ps)
    return primes
            
primes = 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*v
            if s == n:
                return s 
            n = s
        return 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-=1
            v-=1
            g[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 False
        if not ji :
            return True
        if len(ji)&1:
            return False
        if len(ji) == 2:
            a,b = ji
            if a not in g[b]:
                return True
            for u in ou:
                if u not in g[a] and u not in g[b]:
                    return True
            return False
        if len(ji) == 4:
            a,b,c,d = ji
            if a not in g[b] and c not in g[d]:
                return True
            if a not in g[c] and b not in g[d]:
                return True
            if a not in g[d] and c not in g[b]:
                return True
            return 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 = 1
            while a!=b:
                if a > b:
                    a,b = b,a 
                ans += 1
                b //= 2
            return ans
                
        return [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,a
            s,p = set(),[]
            while a:
                s.add(a)
                a //= 2
            while b:
                if b in s:
                    return len(p) + len([a for a in s if a>b])+1
                p.append(b)
                b //= 2

        for 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,a
            s,p = set(),0            
                
            while b:
                if a:
                    s.add(a)
                    a //= 2
                if b in s:
                    return p + len([a for a in s if a>b])+1
                p += 1
                b //= 2
            return p

                
        return [calc(a,b) for a,b in queries]            

六、参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

区块链北大肖老师学习笔记3

第四节:比特币的共识协议 数字货币和纸质货币区别是可以复制&#xff0c;叫作双花攻击 即double spending attack。 去中心化货币要解决两个问题:①数字货币的发行②怎么验证交易的有效性&#xff0c;防止double spending attack。 答案:①比特币的发行是由挖矿决定的 ②…

适合编程初学者的开源博客系统(Vue3+Vant版)

目标 为编程初学者打造入门学习项目&#xff0c;使用各种主流编程语言来实现。让想学编程的&#xff0c;一个都不落下。 上述基本涵盖了当前编程开发所有主流语言。 左侧为前端版本&#xff1a;安卓、iOS、鸿蒙、Flutter、Vue、uni-app、微信小程序。 右侧为服务器端版本&am…

HC-SR501人体感应模块介绍

HC-SR501人体感应模块简介 HC-SR501是基于红外线技术的自动控制模块&#xff0c;采用德国原装进口 LHI778 探头设计&#xff0c;灵敏度高&#xff0c;可靠性强&#xff0c;超低电压工作模式&#xff0c;广泛应用于各类自动感应电器设备&#xff0c;尤其是干电池供电的自动控制产…

【算法】九月算法打卡

2022-09-01 外观数列 后一项是前一项的描述 获取第 n项数列&#xff0c;需要获取第n-1项数列。由此得出要采用递归回溯的形式 /*** param {number} n* return {string}*/ var countAndSay function(n) {if(n 1) return "1";// 上一串字符串let prevSeq countAn…

为什么卷积神经网络对图像的处理有很好的效果

1、前馈神经网络、BP神经网络、卷积神经网络的区别与联系 一、计算方法不同 1、前馈神经网络&#xff1a;一种最简单的神经网络&#xff0c;各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出&#xff0c;并输出给下一层&#xff0e;各层间没有反馈。 …

【Python机器学习】模型聚类高斯混合模型GMM讲解及实战演示(附源码 超详细)

需要源码和数据集请点赞关注收藏后评论留言私信~~~ 模型聚类 模型&#xff08;Model&#xff09;聚类假定每个簇符合一个分布模型&#xff0c;通过找到这个分布模型&#xff0c;就可以对样本点进行分簇。 在机器学习领域&#xff0c;这种先假定模型符合某种概率分布&#xff…

安装Elasticsearch

文章目录部署单点es部署kibanaDevTools安装IK分词器在线安装ik插件&#xff08;较慢&#xff09;离线安装ik插件&#xff08;推荐&#xff09;将 ik 目录 上传到es容器的插件数据卷中重启容器异常测试扩展词 词典部署es集群链接&#xff1a;https://pan.baidu.com/s/1HRHLxmVDf…

12.17

1. Promise 构造函数: Promise (excutor) {} (1) executor 函数: 执行器 (resolve, reject) > {} (2) resolve 函数: 内部定义成功时我们调用的函数 value > {} (3) reject 函数: 内部定义失败时我们调用的函数 reason > {} 说明: executor 会在 Promise 内部立即同…

日期-日历-选择器实现(图文并茂)

文章目录日历模板效果图展示功能点介绍完整代码&#xff08;cv即可&#xff09;index.wxmlindex.wxssindex.js日期时间选择器效果图展示1、使用小程序原生的picker①普通选择器&#xff1a;mode selector②多列选择器&#xff1a;mode multiSelector③时间选择器&#xff1a;…

一起Talk Android吧(第四百四十五回:UI控件之TimePicker)

文章目录概念介绍使用方法内容总结各位看官们大家好&#xff0c;上一回中咱们说的例子是"UI控件之DatePicker",这一回中说的例子是"UI控件之TimePicker"。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android吧&#xff01; 概念介绍 看官们…

字体包体积压缩实践

这篇博客针对axios库的核心代码做一个简要总结 一、关键步骤 1.创建axios对象 axios库导出的对象是一个已经被创建好的axios对象&#xff0c;它本质上是一个方法&#xff0c;可以直接接收一个config配置参数进行请求。在库的入口处&#xff0c;即可看到如下代码&#xff1a;…

非零基础自学Golang 第11章 文件操作 11.1 目录基本操作 11.1.2 创建目录 11.1.3 删除目录

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.1 目录基本操作11.1.2 创建目录11.1.3 删除目录第11章 文件操作 11.1 目录基本操作 11.1.2 创建目录 Go标准库中的os库提供了平台无关性的操作系统功能接口。 创建目录时可以使用os库的如下接口&#xff1…

基于JSP的网络考试系统/在线考试系统的设计与实现

摘 要 网络考试系统是由高校的一个网络考试&#xff0c;按照章程自主开展网络考试系统。网络考试是实施素质教育的重要途径和有效方式&#xff0c;在加强校园文化建设、提高学生综合素质、引导学生适应社会、促进学生成才就业等方面发挥着重要作用&#xff0c;是新形势下有效凝…

[hadoop全分布部署]安装Hadoop、验证Hadoop①

&#x1f468;‍&#x1f393;&#x1f468;‍&#x1f393;博主&#xff1a;发量不足 个人简介&#xff1a;耐心&#xff0c;自信来源于你强大的思想和知识基础&#xff01;&#xff01; &#x1f4d1;&#x1f4d1;本期更新内容&#xff1a;安装Hadoop、验证Hadoop①&#…

【免杀前置课——Windows编程】十九、内存管理—堆,Windows如何管理内存数据?堆内存相关API

内存管理内存管理—堆Windows是如何管理内存数据的?堆内存管理相关API内存管理—堆 每个进程都有自己独立的4G内存空间&#xff0c;高2G操作系统内核使用&#xff0c;低 2G用户使用。 每个进程中我们使用的都是虚拟地址&#xff0c;虚拟机地址到物理地址的转换由操作系统内核…

1. 找出字符串中第一个匹配项的下标

给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入&#xff1a;haystack &qu…

图形学中那些你需要知道的变换概念

前言 在前面的OpenGL ES 教程中&#xff0c;随着教程的进展&#xff0c;我们介绍并使用过很多变换矩阵&#xff0c;但没有系统总结过图形学涉及到的种种变换&#xff0c;因此这篇文章再次回顾“变换”这个主题。 变换 通俗来讲&#xff0c;所谓的变换就像编程中调用一个函数…

非零基础自学Golang 第12章 接口与类型 12.1 接口定义

非零基础自学Golang 文章目录非零基础自学Golang第12章 接口与类型12.1 接口定义12.1.1 接口的定义12.1.2 鸭子类型第12章 接口与类型 在使用接口时&#xff0c;我们经常会遇到这样一个问题&#xff1a;如何判断一个接口的类型&#xff1f;这时&#xff0c;我们就需要学习使用…

Dubbo 4 Dubbo 高级特性 4.1 dubbo-admin 管理平台 4.1.3 dubbo-admin的简单使用

Dubbo 【黑马程序员Dubbo快速入门&#xff0c;Java分布式框架dubbo教程】 4 Dubbo 高级特性 文章目录Dubbo4 Dubbo 高级特性4.1 dubbo-admin 管理平台4.1.3 dubbo-admin的简单使用4.1 dubbo-admin 管理平台 4.1.3 dubbo-admin的简单使用 注意:Dubbo Admin【服务Mock】【服务…

几个字就能生成画作,AIGC的时代即将到来

一、前言 最近AI绘画、聊天、代码生成可以说是刮起了一阵风&#xff0c;席卷了互联网。各大网站都在疯狂刷屏相关的内容&#xff0c;也收到了各界的热烈的关注。无论是AI绘画还是聊天这类的技术都属于同一个领域&#xff1a;人工智能生成内容&#xff08;AIGC&#xff09; 小伙…