[LeetCode周赛复盘] 第 374 场周赛20231203

news2025/6/27 9:35:58

[LeetCode周赛复盘] 第 374 场周赛20231203

    • 一、本周周赛总结
    • 100144. 找出峰值
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 100153. 需要添加的硬币的最小数量
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 100145. 统计完全子字符串
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 100146. 统计感冒序列的数目
      • 1. 题目描述
      • 2. 思路分析
      • 3. 代码实现
    • 参考链接

一、本周周赛总结

  • 比赛后才做出T3,没敢交
  • T1 模拟。
  • T2 贪心+分类讨论。
  • T3 26维前缀和+枚举。
  • T4 组合数学。

100144. 找出峰值

100144. 找出峰值

1. 题目描述

在这里插入图片描述

2. 思路分析

按题意模拟即可。

3. 代码实现

class Solution:
    def findPeaks(self, a: List[int]) -> List[int]:
        return [i for i in range(1,len(a)-1) if a[i-1] < a[i] > a[i+1]]

100153. 需要添加的硬币的最小数量

100153. 需要添加的硬币的最小数量

1. 题目描述

在这里插入图片描述

2. 思路分析

分类讨论
  • 先把数据排序,从小到大处理。
  • 假设当前我们已经得到了[0,s)之间所有的整数。下一个要添加的数x。
    • 添加后可以新获得[x,x+s)之间所有的数。
  • 若x<=s,则可以获得[0,x+s)。
  • 若x>s, 则无法得到s,必须添加s,得到[0,s+s)。

  • 时间复杂度O(nlgn+lgtarget),
  • 解释其中lgtarget:若coins为空,那么我们必须自己构造1 2 4 8相当于给target二进制分解。

3. 代码实现

class Solution:
    def minimumAddedCoins(self, coins: List[int], target: int) -> int:
        coins.sort()
        n = len(coins)
        ans = 0 
        i = 0
        s = 1
        while s <= target:
            if i < n and coins[i] <= s:
                s += coins[i]
                i += 1
            else:
                s += s 
                ans += 1
        return ans

100145. 统计完全子字符串

100145. 统计完全子字符串

1. 题目描述

在这里插入图片描述

2. 思路分析

 被这题干趴了。一开始写了个滑窗一直wa。
  • 这题的难点主要在于计算复杂度,敢不敢暴力。
  • 观察合法子串性质,发现子串长度一定是k的倍数,而且最多是26k。再大的话,一定有字母的出现次数超过k了。
  • 枚举每个位置作为子串的最后一个字符,左端点每次向前跳k,能否快速计算这段里的每个字符的出现次数?
    • 对每个字符单独做前缀和,用一个26*(n+1)的数组存。
    • 这样计算的次数是26。
  • 另外注意,相邻字符差不能超过2,因此左端点向前跳时不能超过这段的开头。
  • 实现时,把原串先改写成0~25的数字。

  • 时间复杂度O(n2626)。最多比较26次(向前跳),每次比较花费26。

3. 代码实现

class Solution:
    def countCompleteSubstrings(self, word: str, k: int) -> int:
        n = len(word)
        a = [ord(c) - ord('a') for c in word]
        cnt = [[0] * 26 for _ in range(n+1)]
        for i, v in enumerate(a):
            cnt[i+1] = cnt[i][:]
            cnt[i+1][v] += 1
        ans = 0
        start = 0  # 当前连续段的开头(相邻差<=2)
        for i, v in enumerate(a):
            if i and abs(v-a[i-1]) > 2:  # 重开一段
                start = i 
            j = i - k + 1  # 往前跳
            over_k = False  # 有一个字符数量已经超过k
            while j >= start and not over_k:
                for x,y in zip(cnt[i+1],cnt[j]):
                    if x-y>k:
                        over_k = True 
                        break
                    if x-y > 0 and x - y != k :
                        break
                else:
                    ans += 1
                j -= k
        
        return ans 

100146. 统计感冒序列的数目

100146. 统计感冒序列的数目

1. 题目描述

在这里插入图片描述

2. 思路分析

组合数学
  • m = len(sick)个病人把 整个数组分割成m+1段,只讨论不为空的段。
  • 处于中间的段,长为k,自己的传染顺序方案有pow(2,k-1)种,即每次要么感染左端,要么感染右端,当长为1时,左右等价。
  • 一共n-m个健康人,从这个序列中选k个位置,作为这组的人的位置,共C(n-m,k)种方案。
    • 安排完这一组,安排下一组时,是从n-m-k中选k’个位置。
  • 然后讨论处于两端的段,他们只有一个传染方向,因此自己的顺序只有一种,但要讨论位置方案。

  • 其中组合数直接贴逆元模板。
  • 初始化放里边竟然会TLE,难绷

3. 代码实现

class ModComb:
    """通过O(n)预处理逆元,达到O(1)询问组合数"""
    def __init__(self, n, p):
        """
        初始化,为了防止模不一样,因此不写默认值,强制要求调用者明示
        :param n:最大值
        :param p: 模
        """
        self.p = p
        self.inv_f, self.fact = [1] * (n + 1), [1] * (n + 1)
        inv_f, fact = self.inv_f, self.fact
        for i in range(2, n + 1):
            fact[i] = i * fact[i - 1] % p
        inv_f[-1] = pow(fact[-1], p - 2, p)
        for i in range(n, 0, -1):
            inv_f[i - 1] = i * inv_f[i] % p

    def comb(self, m, r):
        if m < r or r < 0:
            return 0
        return self.fact[m] * self.inv_f[r] % self.p * self.inv_f[m - r] % self.p
MOD = 10 ** 9 + 7 
mc = ModComb(10**5 + 5, MOD)
class Solution:
    def numberOfSequence(self, n: int, sick: List[int]) -> int:
        ans = 1 
        s = n - len(sick)
        for x,y in pairwise(sick):
            v = y - x -1
            if v:
                ans = ans * mc.comb(s,v) % MOD * pow(2,v-1,MOD) % MOD 
                s -= v 
        ans = ans * mc.comb(s,sick[0]) % MOD
        return ans % MOD       

参考链接

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

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

相关文章

USART的PAL库编程

USART驱动的工作原理 总结一下我们之前使用中断的方式来进行数据的发送和接收 如果收到数据数据在RDR寄存器中 RXNE标志位就从0到1触发中断 进入中断服务函数 把数据缓存在队列中 然后在到进程函数中断接收数据函数中进行出队处理 发送数据就是把中断关闭&#xff08;标志位TXE…

《Junit单元测试》

目录 SpringBoot2.2.0版本之前的单元测试模式 SpringBoot2.2.0版本之后的单元测试模式 SpringBoot2.4以上版本移除了默认对Vintage的依赖 SpringBoot2.2.0版本之前的单元测试模式 SpringBooot 2.2.0 版本开始引入Junit5作为单元测试默认库&#xff0c;之前的版本是使用Junit…

线程...

文章目录 1.Linux中线程该如何理解2.重新定义线程 和 进程3.重谈地址空间 --- 第四讲4.Linux线程周边的概念 线程:是进程内的一个执行分支。线程的执行粒度,要比进程要细 很多教材喜欢这么说&#xff0c;这只是一个线程的特征之一&#xff0c;来解释线程。 1.Linux中线程该如何…

力扣 --- 最后一个单词的长度

题目描述&#xff1a; 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1&#xff1a; 输入&#xff1a;s "Hello World&…

GEE:Sobel算子卷积和Roberts算子卷积对比

作者:CSDN @ _养乐多_ 本文介绍了Sobel算子卷积和Roberts算子卷积操作的代码,并进行了图像对比,可以观察到两个算子的细微差异。 文章目录 一、Sobel算子和Roberts算子对比二、完整代码三、代码链接一、Sobel算子和Roberts算子对比 详细介绍介绍参考《遥感数字图像处理教程…

计算机导论——第39章 文件和目录

除了虚拟化CPU和内存&#xff0c;另外一个是持久存储&#xff0c;永久存储信息。持久存储设备与内存不同&#xff0c;内存在断电时内容会丢失&#xff0c;而持久存储设备会保持这些数据不变。 1. 文件和目录 文件就是一个线性字节数组&#xff0c;每个字节都可以读取或者写入…

DBS note7 (end):DB Design

目录 一、前言 二、引言 三、Entity-Relationship Models&#xff08;实体-关系模型&#xff09; 1、关系约束 三、函数依赖和正则化 1、BCNF分解 2、无损分解 3、依赖关系保留分解 一、前言 略读过一遍CS186&#xff0c;对于CS186来说&#xff0c;绝对不止这 7 篇笔记…

windows 你的电脑不能投影到其他屏幕,请尝试重新安装驱动程序

注意 千万不要去下载什么驱动精灵&#xff0c;太垃圾不好用还一堆附带的软件。按以下步骤进行解决&#xff1a; 解决方法 可能是显卡驱动的问题&#xff0c;我的笔记本按照如下步骤重启一下驱动后解决了&#xff0c;步骤如下: 右键点击桌面的开始菜单&#xff0c;选择”设备…

算法通关村第十六关-白银挑战滑动窗口经典题目

大家好我是苏麟 , 今天带来滑动窗口经典的一些题目 . 我们继续来研究一些热门的、高频的滑动窗口问题 大纲 最长子串专题无重复字符的最长子串 长度最小的子数组盛最多水的容器 最长子串专题 无重复字符的最长子串 描述 : 给定一个字符串 s &#xff0c;请你找出其中不含有重…

React如何像Vue一样将css和js写在同一文件

如果想在React中想要像Vue一样把css和js写到一个文件中&#xff0c;可以使用CSS-in-JS。 使用CSS-in-JS 下载 npm i styled-components使用 就像写scss一样&#xff0c;不过需要声明元素的类型 基本语法及展示如下&#xff0c; import styled from "styled-component…

React使报错不再白屏

如果代码中出现问题导致报错&#xff0c;通常会使页面报错&#xff0c;导致白屏 function Head() {// 此时模拟报错导致的白屏return <div>Head --- {content}</div> } export default () > {return (<><div>下面是标题</div><Head />…

Swing程序设计(7)JPane面板,滑动面板

文章目录 前言一、JPane面板&#xff0c;滑动面板是什么&#xff1f;二、实操展示 1.JPane面板2.JScrollPane面板总结 前言 该篇博客介绍Java的Swing程序中JPane面板以及&#xff0c;滑动面板的使用。面板的使用&#xff0c;各个组件在不同的面板上被不同地摆放&#xff0c;让插…

MATLAB Simulink +STM32硬件在环 (HIL)实现例程测试

MATLAB Simulink STM32硬件在环 &#xff08;HIL&#xff09;实现例程测试 &#x1f4cd;相关篇《STM32CubeMxMATLAB Simulink点灯程序》✨本例程没有使用到STM32CubeMX来创建工程&#xff08;在Simulink 中不是选择的STM32xxxbased类型的&#xff09;。 &#x1f516;STM32xxx…

Github无法打开

文章目录 一、问题二、解决2.1、科学上网&#xff08;使用中&#xff09;2.2、使用代理&#xff08;不稳定&#xff09;2.3、修改hosts&#xff08;得更新&#xff09;2.3.1、找到hosts文件2.3.2、复制hosts文件2.3.3、添加记录2.3.4、替换原来的hosts文件2.3.5、成功访问Githu…

W2311294-万宾科技可燃气体监测仪怎么进行数据监测

万宾科技可燃气体监测仪怎么进行数据监测 燃气是现代城市之中重要的能源&#xff0c;它已经渗透到城市生活的方方面面&#xff0c;对燃气管网的管理也在考验着政府人员的工作能力。燃气管网的安全运行和城市的安全和人民的生活直接挂钩。为了及时掌握燃气管网的运行状态&#x…

2023年GopherChina大会-核心PPT资料下载

一、峰会简介 自 Go 语言诞生以来&#xff0c;中国便是其应用最早和最广的国家之一&#xff0c;根据 Jetbrains 在 2021 年初做的调查报告&#xff0c;总体来说目前大概有 110 万专业的开发者 选择 Go 作为其主要开发语言。就其全球分布而言, 居住在亚洲的开发者最多&#xff…

了解大模型 RAG (Retrieval-Augmented Generation):大模型外挂知识库 (检索增强技术)

本心、输入输出、结果 文章目录 了解大模型 RAG &#xff08;Retrieval-Augmented Generation&#xff09;&#xff1a;大模型外挂知识库 &#xff08;检索增强技术&#xff09;前言什么是检索增强技术 RAG &#xff08;Retrieval-Augmented Generation&#xff09;检索增强技术…

RocketMQ领域模型详解

1、主题&#xff08;Topic&#xff09; 1.1、定义​ 主题是 Apache RocketMQ 中消息传输和存储的顶层容器&#xff0c;用于标识同一类业务逻辑的消息。 主题的作用主要如下&#xff1a; 定义数据的分类隔离&#xff1a; 在 Apache RocketMQ 的方案设计中&#xff0c;建议将不同…

【STM32】STM32学习笔记-STM32简介(02)

00. 目录 文章目录 00. 目录01. STM32简介1.1 STM32是什么1.2 STM32应用领域1.3 STM32命名规则1.4 STM32选型 02. ARM简介2.1 ARM是什么2.2 ARM系列 03. STM32开发板3.1 MCU简介3.2 STM32开发板3.3 STM32硬件资源 04. STM32系统架构05. STM32引脚定义06. STM32启动配置07. STM3…

python爬虫AES魔改案例:某音乐素材下载网

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、找出需要加密的参数 js运行 atob(‘aHR0cHM6Ly93d3cuYWlnZWkuY29tL3NvdW5kL2NsYXNzLw’) 拿到网址&#xff0c;F12打开调…