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

[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 = 0s = 1while s <= target:if i < n and coins[i] <= s:s += coins[i]i += 1else:s += s ans += 1return 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] += 1ans = 0start = 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  # 有一个字符数量已经超过kwhile j >= start and not over_k:for x,y in zip(cnt[i+1],cnt[j]):if x-y>k:over_k = True breakif x-y > 0 and x - y != k :breakelse:ans += 1j -= kreturn 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 = pself.inv_f, self.fact = [1] * (n + 1), [1] * (n + 1)inv_f, fact = self.inv_f, self.factfor i in range(2, n + 1):fact[i] = i * fact[i - 1] % pinv_f[-1] = pow(fact[-1], p - 2, p)for i in range(n, 0, -1):inv_f[i - 1] = i * inv_f[i] % pdef comb(self, m, r):if m < r or r < 0:return 0return 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 -1if v:ans = ans * mc.comb(s,v) % MOD * pow(2,v-1,MOD) % MOD s -= v ans = ans * mc.comb(s,sick[0]) % MODreturn ans % MOD       

参考链接

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Linux docker方式快速安装Plik并结合内网穿透实现公网访问

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问&#xff0c;实现随时随地在任意设备上传或者…

C语言扫雷游戏

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、扫雷游戏的分析和设计1.1扫雷游戏的功能说明1.2数据结构的分析1.3文件结构设计 二、扫雷游戏的代码实现总结 前言 详细介绍扫雷游戏的思路和实现过程。 一…

高校人员信息管理系统C++

代码&#xff1a;https://mbd.pub/o/bread/ZZeZk5lx 一、基本内容论述 1、问题描述 某高校有四类员工&#xff1a;教师、实验员、行政人员、教师兼行政人员&#xff1b;共有的信息包括&#xff1a;编号、姓名、性别、年龄等。其中&#xff0c;教师还包含的信息有&#xff1a;所…

堆排序(C语言)

前言 在上一篇内容&#xff1a;大小堆的实现&#xff08;C语言&#xff09;&#xff0c;我们实现了关于创建大小堆的各函数与实现。但是如果突然要使用一个堆排序但是此时并没有一个现成的堆&#xff0c;这就需要花费时间去新建实现堆的插入删除这些操作从而实现一个堆&#xf…

51单片机应用从零开始(十)·指针

指针 C语言指针是一种保存变量地址的数据类型。它可以让程序直接访问内存中的数据&#xff0c;而不需要通过变量名来访问。指针变量存储的是一个地址&#xff0c;这个地址指向内存中的某个位置&#xff0c;该位置存储了一个值。 在C语言中&#xff0c;可以使用&运算符取得一…

Endnote加入新的style(参考文献格式)

1. 下载模板 可以从官网上下载模板&#xff0c;比如某些常见的期刊都有自己的模板&#xff0c;还有写中文论文的话有专门的GBT7714。 2. 示范 以下图MDPI为例&#xff0c;下载下来是一个ens文件。 双击打开此文件 file -> save as 输入保存的名字&#xff0c;我这里保…

字符串转换整数

字符串转换整数 描述 : 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格检查下一个字符&am…

Linux:docker镜像的创建(5)

1.基于已有镜像创建 步骤&#xff1a; 1.将原始镜像加入容器并运行 2.在原始镜像中部署各种服务 3.退出容器 4.使用下面命令将容器生成新的镜像 现在我们在这个容器里做了一些配置&#xff0c;我们要把他做成自己镜像 docker commit -m "centos7_123" -a "tarr…

【工具使用-Audition】如何使用Audition查看频率

一&#xff0c;简介 在工作过程中要对处理后的音频进行频率分析&#xff0c;本文以Audition 2020为例进行说明&#xff0c;供参考。 二&#xff0c;操作步骤 2.1 生成测试音源 使用Audition生成左通道为1KHz&#xff0c;右通道为10KHz的音源信号 如图所示&#xff1a; 2.…

Android Init系统:引领设备启动的先锋

Android Init系统&#xff1a;引领设备启动的先锋 引言 Init系统是一个操作系统启动的必要组件&#xff0c;负责在启动时初始化所有系统资源、服务和应用程序。在Android设备中&#xff0c;Init系统起到了至关重要的作用&#xff0c;它是启动过程中的第一个进程&#xff0c;负…

学习知识回顾随笔(远程连接MySQL|远程访问Django|HTTP协议|Web框架)

文章目录 如何远程连接MySQL数据库1.创建用户来运行&#xff0c;此用户从任何主机连接到mysql数据库2.使用IP地址来访问MySQL数据库 如何远程访问Django项目Web应用什么是Web应用应用程序的两种模式Web应用程序的优缺点 HTTP协议&#xff08;超文本传输协议&#xff09;简介HTT…

C++-模板

目录 一.泛型编程 二.模板的分类 三.函数模板 1.函数模板的概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 a.隐式实例化 b.显式实例化 5.模板参数的匹配原则 四.类模板 1.类模板的定义格式 2.类模板的实例化 五.class和typename的区别 六.非类型模板…

路由策略,gRPC 路由如何实现

目录 一、为啥我们要路由策略&#xff1a; 二、基于gRPC 路由策略 一、为啥我们要路由策略&#xff1a; 我们可以重新回到调用方发起 RPC 调用的流程。在 RPC 发起真实请求的时候&#xff0c;有一个步骤就是从服务提供方节点集合里面选择一个合适的节点&#xff08;就是我们…

C++基础 -37- 模板函数与普通函数调用规则

当模板函数比普通函数更好匹配形参的时候&#xff0c;会优先调用模板函数 #include "iostream"using namespace std;template <class T> void show(T a, T b) {cout << a << endl;cout << b << endl;cout << "temp show&…

Matlab论文插图绘制模板第129期—函数网格曲面图

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 函数三维折线图&#xff1a; 进一步&#xff0c;再来分享一下函数网格曲面图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自…

Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画

最近DOTS发布了正式的版本, 我们来分享现在流行基于群体战斗的弹幕类游戏&#xff0c;实现的核心原理。今天给大家介绍大规模战斗群体3D角色的动画如何来实现。 DOTS 对角色动画支持的局限性 截止到Unity DOTS发布的版本1.0.16,目前还是无法很好的支持3D角色动画。在DOTS 的b…

陷同质化“高端”悖论,良品铺子降价应对,沃隆食品IPO已终止

撰稿|行星 来源|贝多财经 坚持“高端零食”战略多年的良品铺子&#xff0c;脱下了自己的“长衫”。 近日&#xff0c;良品铺子&#xff08;SH.603719&#xff09;仅上任三天的董事长、总经理杨银芬在全员公开信中表示&#xff0c;该品牌将实施17年来最大规模降价&#xff0c…

oops-framework框架 之 界面管理(三)

引擎&#xff1a; CocosCreator 3.8.0 环境&#xff1a; Mac Gitee: oops-game-kit 注&#xff1a; 作者dgflash的oops-framework框架QQ群&#xff1a; 628575875 回顾 在上文中主要通过oops-game-kit大家了一个新的模版项目&#xff0c; 主要注意项是resources目录下的两个文…

TS版LangChain实战:基于文档的增强检索(RAG) | 京东云技术团队

LangChain LangChain是一个以 LLM &#xff08;大语言模型&#xff09;模型为核心的开发框架&#xff0c;LangChain的主要特性&#xff1a; 可以连接多种数据源&#xff0c;比如网页链接、本地PDF文件、向量数据库等允许语言模型与其环境交互封装了Model I/O&#xff08;输入…

【力扣206】反转链表

【力扣206】反转链表 一.题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1 &#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2 &#xff1a; 输入&#xff1a;head [1,2] 输出&#x…