[LeetCode周赛复盘] 第 320 场周赛20221120

news2025/1/9 18:13:22

[LeetCode周赛复盘] 第 320 场周赛20221120

    • 一、本周周赛总结
    • 二、 [Easy] 6241. 数组中不等三元组的数目
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 三、[Medium] 6242. 二叉搜索树最近节点查询
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 四、[Hard] 6243. 到达首都的最少油耗
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 五、[Medium] 6244. 完美分割的方案数
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 六、参考链接

一、本周周赛总结

  • T4写了N^3,估计会被re,哭了。
  • T2 dfs+二分。
  • T3 dfs树状dp。
  • T4 dp+前缀和优化。
    在这里插入图片描述

二、 [Easy] 6241. 数组中不等三元组的数目

链接: 6241. 数组中不等三元组的数目

1. 题目描述

在这里插入图片描述

2. 思路分析

数据量100显然暴力模拟。

  • 如果数据量大,可以采取排序然后枚举每个数作为中间数的方法,乘法原理乘三部分的数量。复杂度nlgn

3. 代码实现

class Solution:
    def unequalTriplets(self, nums: List[int]) -> int:
        n = len(nums)
        ans = 0
        for i in range(n-2):
            for j in range(i+1,n-1):
                for k in range(j+1,n):
                    if len({nums[i],nums[j],nums[k]}) == 3:
                        ans += 1
        return ans

三、[Medium] 6242. 二叉搜索树最近节点查询

链接: 6242. 二叉搜索树最近节点查询

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 遍历出来二分即可。
  • 没注意到题目是BST,实际上中根遍历后就是有序的。

3. 代码实现

class Solution:
    def closestNodes(self, root: Optional[TreeNode], queries: List[int]) -> List[List[int]]:
        a = set()
        def dfs(o):
            if not o:
                return 
            a.add(o.val)
            dfs(o.left)
            dfs(o.right)
        dfs(root)
        a = sorted(a)
        n = len(a)
        ans = []
        for x in queries:
            p = bisect_left(a,x)
            if p<n:
                if a[p] == x:
                    ans.append([x,x])
                    continue
                if p:
                    ans.append([a[p-1],a[p]])                    
                else:
                    ans.append([-1,a[p]])
            else:
                ans.append([a[-1],-1])
        return ans                                       

四、[Hard] 6243. 到达首都的最少油耗

链接: 6243. 到达首都的最少油耗

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 题目没说清楚,没想到可以换车。wa了一发。
  • 由于可以换车,因此dfs时,每个节点的总人数除以座位数上取整就是车的数目。

3. 代码实现

class Solution:
    def minimumFuelCost(self, roads: List[List[int]], seats: int) -> int:
        n = len(roads) + 1
        if  n == 1:
            return 0
        g = [[] for _ in range(n)]
        for u,v in roads:
            g[u].append(v)
            g[v].append(u)
        
        def dfs(u,fa):  # 载人数,油耗,车数
            s,cost,car = 0,0,0
            for v in g[u]:
                if v == fa:continue
                a,b,c= dfs(v,u)
                # print(u,v,a,b,c)
                s += a
                cost += b
                car += c
            if u == 0:
                return s,cost,car
            if s > 0:
                s += 1
                car = (seats+s-1)//seats
                
                return s,cost+car,car
            
            return s + 1,cost+car+1,car+1
        
        s,cost,car = dfs(0,-1)
            
        return cost

五、[Medium] 6244. 完美分割的方案数

链接: 6244. 完美分割的方案数

1. 题目描述

在这里插入图片描述

2. 思路分析

  • 有取模,有方案数,有k段,显然是dp。
  • 定义f[i][j]为s前j个数分成i段的情况。
  • 这里注意段数i在外侧,这样才能前缀和优化。
  • 正常的转移显然是n^3的,因为要遍历最后一段的分割点在哪,即f[i][j] = sum{f[i-1][j’]},其中j’是所有分割点,且j’+1到j是一段合法串,j’之前也是合法串。
  • 这里需要前缀和优化,j向右遍历时,发现j’也是向右的,且不会用到之前的状态,只会用最后一个的状态,因此可以前缀和累计即可。
  • 代码实现时,由于合法串可以用边界位置是否能分割来判断,可以写一个判断是否是合法分割点的函数来封装,以减少代码。
  • 计算j时,可以剪枝前后的遍历边界位置。
    在这里插入图片描述

3. 代码实现

MOD = 10**9+7
class Solution:
    def beautifulPartitions(self, s: str, k: int, minLength: int) -> int:
        n = len(s)
        ps = {2,3,5,7}
        a = list(map(int,s))
        def is_prime(v):
            return v in ps 
        def can_split(j):
            return j == 0 or j == n or (not is_prime(a[j-1]) and is_prime(a[j]))
        if k*minLength > n or is_prime(a[-1]) or not is_prime(a[0]):
            return 0
        f = [[0]*(n+1) for _ in range(k+1)]
        f[0][0] = 1
        for i in range(1,k+1):
            s = 0
            for j in range(minLength*i,n-(k-i)*minLength+1):
                if can_split(j-minLength):
                    s = (s+f[i-1][j-minLength])%MOD
                if can_split(j):
                    f[i][j] = s
                    
        return f[-1][-1]%MOD                               

考试时的n^3写法

MOD = 10**9+7
class Solution:
    def beautifulPartitions(self, s: str, k: int, minLength: int) -> int:
        n = len(s)
        ps = {2,3,5,7}
        if n < minLength:
            return 0
        if int(s[0]) not in ps:
            return 0
        if int(s[-1]) in ps:
            return 0
        a = list(map(int,s))
        # print(a)
        pp = [-1]
        for i in range(1,n-2):
            if a[i] not in ps and a[i+1] in ps:
                pp.append(i)
        if minLength<=2:
            return comb(len(pp)-1,k-1)%MOD
        # print(pp)
        @cache
        def f(i,j):
            if i == j == 0:
                return 1
            if i == 0:
                return 0
            if j <= 0:
                return 0
            # if a[i-1] in ps:
            #     return 0
            ret = 0
            pos = bisect_right(pp,i-minLength-1)
            for kk in range(0,pos):
                ret = (ret+f(pp[kk]+1,j-1))%MOD
            # for p in pp:
            #     if i-1-p>=minLength:
            #         # print(p+1,j-1,f(p+1,j-1))
            #         ret = (ret+f(p+1,j-1))%MOD
            return ret
            
        ans = f(n,k)%MOD        
        f.cache_clear()                       
        return ans

六、参考链接

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

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

相关文章

10_libpcap以及libnet

知识点1【飞秋欺骗】 1、windwos安装飞秋 双击运行 2、ubuntu安装飞秋 sudo apt-get install iptux ubuntu运行飞秋&#xff1a;iptux& 3、飞秋的格式&#xff1a; 版本:包编号:用户名:主机名:命令字:附加消息 飞秋的端口是2425固定的 1表示上线 32表示普通消息 1_i…

(经典dp) hdu 递推求解专题练习

文章目录前言题单hdu2044 一只小蜜蜂...hdu2045 不容易系列之(3)—— LELE的RPG难题hdu2046 骨牌铺方格hdu2047 阿牛的EOF牛肉串hdu2048 神、上帝以及老天爷hdu2049 不容易系列之(4)——考新郎hdu2050 折线分割平面END前言 题单&#xff1a;递推求解专题练习&#xff08;For Be…

华为机试 - 找出经过特定点的路径长度

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 无 输入描述 输入一个字符串&#xff0c;都是以大写字母组成&#xff0c;每个相邻的距离是 1&#xff0c; 第二行输入一个字符串&#xff0c;表示必过的点。 说明每个点可过多次。 输出描述 经过这…

精益(Lean)与ERP实施

周四、五看完了24小时不停的Lean Global Connection&#xff0c;总觉得要说些什么。 印象最深的有三个地方&#xff1a; 一是John Shook的话&#xff0c;他说Lean是一种Mindset。 这种Mindset是&#xff1a; 一种积极的态度&#xff0c;Problems solving, 把问题和挑战当成是…

Web 性能优化:TLS

个人博客 Web 性能优化&#xff1a;TCP&#x1f3af; Web 性能优化&#xff1a;TLSWeb 性能优化&#xff1a;HTTP “do it, do it work, do it better … and secure ☠️” 随着追逐利益而来的恶意参与者越来越多&#xff0c;当前的 Web 应用&#xff0c;已经从野蛮生长转而…

【通关MySQL】Java的JDBC编程

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【通关MySQL】 ✈️✈️本篇内容:Java的JDBC编程。 &#x1f680;&#x1f680;代码存放仓库gitee&#xff1a;MySQL码云存放&#xff01; ⛵⛵作者简介&#xff…

[附源码]java毕业设计-室内田径馆预约管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

轻量应用服务器和云服务器CVM有什么区别?

腾讯云新推出的轻量应用服务器Lighthouse和原来的CVM云服务器有什么区别&#xff1f;轻量应用服务器Lighthouse是一种易于使用和管理、适合承载轻量级业务负载的云服务器&#xff0c;主要用于Web网站应用&#xff0c;轻量服务器使用及后期运维更加简单方便&#xff1b;云服务器…

RNA-seq 保姆教程:差异表达分析(二)

介绍 RNA-seq 目前是测量细胞反应的最突出的方法之一。RNA-seq 不仅能够分析样本之间基因表达的差异&#xff0c;还可以发现新的亚型并分析 SNP 变异。本教程[1]将涵盖处理和分析差异基因表达数据的基本工作流程&#xff0c;旨在提供设置环境和运行比对工具的通用方法。由于完整…

计算机网络——数据链路层

数据链路层概述 数据链路层在网络体系结构中所处的地位 主机H1给主机H2发送数据时&#xff0c;需要通过路由器R1通过广域网链路转发到路由器R2&#xff0c;R2转发到主机H2。路由器转发只用到网络层及以下各层。【以上涉及数据包按网络体系结果逐层封装解封】 为了简单起见&am…

DevC++的调试方法

目录 Dev C调试程序 Dev C调试注意事项对于修改后的程序&#xff0c;调试程序之前一定要先编译程序。 要想学会编程,第一步就是要学会调试(想我这种码龄一年的人还不会调试,丢死人). 今天,为了让你们的脸丢少点,特意写了这篇博文,给予需要帮助的人. 所谓调试程序&#xff0…

[附源码]计算机毕业设计JAVA基于JSP健身房管理系统

[附源码]计算机毕业设计JAVA基于JSP健身房管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM m…

Python实现KNN(K近邻)分类模型(KNeighborsClassifier算法)并应用网格搜索算法寻找最优参数值以及数据标准化均衡化项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 股票市场是已经发行的股票转让、买卖和流通的场所&#xff0c;包括交易所市场和场外交易市场两大类别。…

【C++】C++11部分特性

目录 一、初始化列表 二、变量类型的推导 1、auto 2、decltype 三、右值引用 1、左值与右值 2、关于左值引用、右值引用的问题 1、左值引用可以引用右值吗&#xff1f; 2、右值引用可以引用左值吗&#xff1f; 3、右值引用之后的问题 3、移动构造、移动拷贝 1、引用…

软件测试质量保证与测试

软件测试质量保证与测试 第一章 软件测试概述 1.1 软件测试背景 随着计算机技术的迅速发展和越来越广泛深入地应用于国民经济与社会生活的各个方面&#xff0c;软件系统的规模和复杂性与日俱增&#xff0c;软件的生产成本和软件中存在的缺陷与故障造成的各类损失也大大增加&…

【应用】PostgreSQL 流复制配置

PostgreSQL 流复制配置centos7 安装 postgresql时序库 timescaleDB 的安装postgresql-14 主从流复制主库配置从库配置同步流复制与异步流复制异步流复制转换为同步流复制流复制的相关参数主从流复制原理PostgreSQL WAL 日志主从流复制架构主从流复制的过程基于 docker swarm 的…

CMSC5713-IT项目管理之七、质量管理Quality Management

文章目录7.1 Quality7.2. Software Quality7.2.1. ISO/IEC 25010 Software Qualities7.2.2. Internal versus External qualities7.2.3. Software Metrics7.3. Quality Specification7.4. Project Quality Management7.4.1. Quality Planning7.4.2. Quality Assurance7.4.2.1. …

vscode 阅读 linux kernel 源码

前言 虽然身边的朋友大都在使用 source insight&#xff0c;但我却更喜欢 vscode。 不过 vscode 在代码搜索上确实不如 source insight&#xff0c;这点上我也是吃过亏的。阅读大型代码时&#xff0c;常常搜索不到关键代码&#xff0c;导致对代码的理解不充分。 当使用 vscode…

Java-反射

前言 动态语言与静态语言 动态语言 是一类在运行时可以改变其结构的语言&#xff1a;例如新的函数、对象、甚至代码可以被引进&#xff0c;已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构主要动态语言有&#xff1a;Object…

【开源电路】STM32F401RCT6开发板

【开源电路】STM32F401RCT6开发板&#x1f337;实物PCBA&#xff1a; &#x1f33c;优化后的3D效果图 &#x1f4da;STM32F401RCT6开发板简介 &#x1f4d1;主控是LQFP-64封装的STM32F401RCT6芯片&#xff0c;Micro USB接口供电&#xff0c;功能引脚全部引出&#xff0c;一个…