【LeetCode周赛】第 390 场周赛
目录
- 3090. 每个字符最多出现两次的最长子字符串 简单
- 3091. 执行操作使数据元素之和大于等于 K 中等
- 3092. 最高频率的 ID 中等
- 3093. 最长公共后缀查询 困难
3090. 每个字符最多出现两次的最长子字符串 简单
3090. 每个字符最多出现两次的最长子字符串
分析:
数据量,按照题意模拟即可。
这里我是用了 前缀和 记录了 0~i 的所有字母出现的次数。
代码:
C++
class Solution {
public:int maximumLengthSubstring(string s) {int n=s.length();vector<vector<int>> cnt(n+1,vector<int>(26,0));for(int i=0;i<n;i++){cnt[i+1][s[i]-'a']++;for(int j=0;j<26;j++) cnt[i+1][j]+=cnt[i][j];}for(int i=n;i>1;i--){for(int j=0;j+i<=n;j++){int k=0;for(;k<26;k++){if(cnt[j+i][k]-cnt[j][k]>2) break;}if(k==26) return i;}}return 1;}
};
python
class Solution:def maximumLengthSubstring(self, s: str) -> int:cnt = [[0] * 216 for i in range(len(s)+1)]for i in range(len(s)):cnt[i+1][ord(s[i]) - ord('a')]+=1for j in range(26):cnt[i+1][j] += cnt[i][j]for i in range(len(s),1,-1):for j in range(0,len(s)-i+1):flag = Truefor k in range(26):if cnt[i+j][k] - cnt[j][k]>2:flag=Falsebreakif flag:return ireturn 1
3091. 执行操作使数据元素之和大于等于 K 中等
3091. 执行操作使数据元素之和大于等于 K
分析:
法一:
贪心+找规律
在固定的操作次数 l l l 下,先进行 ⌊ l / 2 ⌋ \lfloor l/2 \rfloor ⌊l/2⌋ 次操作一,再进行 l − ⌊ l / 2 ⌋ l - \lfloor l/2 \rfloor l−⌊l/2⌋ 操作二,即可得到最大的元素之和。
规律如下:
操作次数 l | 最大元素之和 |
---|---|
1 1 1 | 1 ∗ 2 = 2 1 * 2 = 2 1∗2=2 |
2 2 2 | 2 ∗ 2 = 4 2 * 2 = 4 2∗2=4 |
3 3 3 | 2 ∗ 3 = 6 2 * 3 = 6 2∗3=6 |
4 4 4 | 3 ∗ 3 = 9 3 * 3 = 9 3∗3=9 |
5 5 5 | 3 ∗ 4 = 12 3 * 4 = 12 3∗4=12 |
6 6 6 | 4 ∗ 4 = 16 4 * 4 = 16 4∗4=16 |
… | … |
最终依照此规律,寻找最小的大于 k 的操作次数。
法二:
贪心+枚举
先加,后复制得到的数更大。
最多进行 k-1 次加法,此时是操作次数最大的情况,枚举 1~k-1 次加法,再计算后续还需要多少次复制,维护最小操作数即可。
代码:
法一
C++
class Solution {
public:int minOperations(int k) {if(k==0||k==1) return 0;int cnt=1,a=1,b=2;while(a*b<k){if(a<b) a++;else b++;cnt++;}return cnt;}
};
python
class Solution:def minOperations(self, k: int) -> int:if k==1 or k==0:return 0cnt,a,b=1,1,2while a*b<k:if a<b:a+=1else:b+=1cnt+=1return cnt
法二:法二
3092. 最高频率的 ID 中等
3092. 最高频率的 ID
分析:
寻找每次操作后,出现频率最高的数即可。
题目难点在于,在每次操作之后怎么寻找当前出现频率最高的数。
- 遍历的话,数据量大一定超时。
- 利用语言自带的工具
- 哈希表 + 可重复的有序集合:c++中的
multiset
,python中的SortedList
- 哈希表 + 优先队列 + 懒删除堆
- 哈希表 + 可重复的有序集合:c++中的
懒删除堆:因为优先队列不能查找,因此对于并非队首或队尾的元素,我们无法操作。可以使用 哈希表 维护当前的ID出现的次数,并将修改后的ID即其出现次数放入优先队列。同时对比优先队列队首的ID出现次数,与当前不符,就弹出。
代码:
哈希表 + 可重复的有序集合
C++
class Solution {
public:vector<long long> mostFrequentIDs(vector<int>& nums, vector<int>& freq) {unordered_map<int ,long long> m;multiset<long long> s;vector<long long> ans;m[nums[0]]+=1LL*freq[0];s.emplace(1LL*freq[0]);ans.push_back(1LL*freq[0]);for(int i=1;i<nums.size();i++){long long t = m[nums[i]];m[nums[i]]+=1LL*freq[i];auto it = s.find(t);if(it != s.end()){s.erase(it); // 删除集合中的一个 t}s.insert(m[nums[i]]);ans.push_back(*s.rbegin()); // 有序集合,s.rbegin() 即为最大的出现次数}return ans;}
};
python
from sortedcontainers import SortedList
class Solution:def mostFrequentIDs(self, nums: List[int], freq: List[int]) -> List[int]:cnt = Counter()s = SortedList()ans = []for x,f in zip(nums, freq):t = cnt[x]s.discard(t)cnt[x]+=fs.add(cnt[x])ans.append(s[-1])return ans
哈希表 + 优先队列 + 懒删除堆
C++
class Solution {
public:vector<long long> mostFrequentIDs(vector<int>& nums, vector<int>& freq) {unordered_map<int ,long long> m;priority_queue<pair<long long, int>> q;vector<long long> ans;m[nums[0]]+=1LL*freq[0];q.emplace(m[nums[0]], nums[0]);ans.push_back(1LL*freq[0]);for(int i=1;i<nums.size();i++){long long t = m[nums[i]];m[nums[i]]+=1LL*freq[i];q.emplace(m[nums[i]], nums[i]); // 不断的将修改后的 ID 及其 对应的出现次数 加入优先队列// 如下循环 实现 懒删除堆while(m[q.top().second] != q.top().first) q.pop(); // 与当前 ID 的出现次数不符合,弹出优先队列ans.push_back(q.top().first);}return ans;}
};
python
class Solution:def mostFrequentIDs(self, nums: List[int], freq: List[int]) -> List[int]:cnt = Counter()h = []ans = []for x,f in zip(nums, freq):cnt[x]+=fheapq.heappush(h, (-cnt[x], x))while -h[0][0] != cnt[h[0][1]]:heapq.heappop(h)ans.append(-h[0][0])return ans
3093. 最长公共后缀查询 困难
3093. 最长公共后缀查询
分析:
构建基于字符串后缀的字典树,并且不断维护对应下标,后续不断在字典树上查找即可。
注意数组的使用,容易内存超限。
同时注意当没有后缀与其匹配是,需要填入最短字符串的下标、
构建字典树模板:CPP
构建字典树模板:Python
代码:
C++
class Node{
public:int index=-1;Node* next[26]{};
};class Solution {
public:vector<int> stringIndices(vector<string>& wordsContainer, vector<string>& wordsQuery) {int n=wordsContainer.size(),m=wordsQuery.size(),d=1e4+5,dindex=-1;vector<int> ans;Node* root = new Node();for(int i=0;i<n;i++){int l=wordsContainer[i].length();if(d>l) d=l,dindex=i;Node* node = root;for(int j=l-1;j>=0;j--){int k = wordsContainer[i][j]-'a';if(!node->next[k]) node->next[k] = new Node();node = node->next[k];if(node->index==-1) node->index=i;else{if(wordsContainer[node->index].length()>l) node->index=i;}}}for(int i=0;i<m;i++){Node* node = root;int l=wordsQuery[i].length();int index=-1;for(int j=l-1;j>=0;j--){int k = wordsQuery[i][j]-'a';if(!node->next[k])break;node=node->next[k];index=node->index;}ans.push_back(index!=-1?index:dindex);}return ans;}
};
python
class Node:def __init__(self) -> None:self.children = [None] * 26self.index = -1class Solution:def stringIndices(self, wordsContainer: List[str], wordsQuery: List[str]) -> List[int]:n,m = len(wordsContainer), len(wordsQuery)d,d_index = len(wordsContainer[0]),0ans = []def build_trie() -> Node: # 构建字典树nonlocal wordsContainer,d,d_indexroot = Node()for i in range(n):l=len(wordsContainer[i])if d>l:d=ld_index=inode = rootfor j in range(l-1, -1, -1):k = ord(wordsContainer[i][j]) - ord('a') # 字母转换成下标if node.children[k] == None:node.children[k] = Node()node = node.children[k]if node.index == -1: # 更新更优下标node.index = ielse:node.index = i if len(wordsContainer[node.index]) > l else node.indexreturn rootroot = build_trie()def find_word(s: str):nonlocal rootnode = rootindex = -1for i in range(len(s)-1,-1,-1):k = ord(s[i]) - ord('a')if node.children[k]==None:breaknode = node.children[k]index = node.indexreturn indexfor i in range(m):t = find_word(wordsQuery[i])ans.append(t if t!=-1 else d_index)return ans
相关文章:
【LeetCode周赛】第 390 场周赛
目录 3090. 每个字符最多出现两次的最长子字符串 简单3091. 执行操作使数据元素之和大于等于 K 中等3092. 最高频率的 ID 中等3093. 最长公共后缀查询 困难 3090. 每个字符最多出现两次的最长子字符串 简单 3090. 每个字符最多出现两次的最长子字符串 分析: 数据量…...
leetcode 343.整数拆分
思路:记忆化搜索或者动态规划 我们首先捋一下思路,而且分析最优解这一类问题,我们需要几个步骤: 1.看问题的描述,找出问题问的最优问题是什么; 2.然后我们就模拟一下这个问题进行到最后一步是什么样子&a…...

部署Zabbix Agents添加使能监测服务器_Linux平台_Yum源/Archive多模式
Linux平台 一、从yum源脚本安装部署Zabbix-Agent,添加Linux Servers/PC 概述 Zabbix 主要有以下几个组件组成: Zabbix Server:Zabbix 服务端,Zabbix的核心组件,它负责接收监控数据并触发告警,还负责将监控数据持久化到数据库中。 Zabbix Agent:Zabbix客户端,部署在被监…...

吴恩达2022机器学习专项课程(一) 第一周课程实验:模型表示(Lab_03)
目标 学习如何使用一个变量实现线性回归模型。 导入需要的库 存储特征x和目标变量y 这是真实的训练集,[1.0,2.0]是房子的大小,[300,500]是房子的价格。 使用数组存储训练集的数据: x_train:存储的是所有特征,[1.…...

流畅的 Python 第二版(GPT 重译)(十)
第十八章:with、match 和 else 块 上下文管理器可能几乎与子例程本身一样重要。我们只是初步了解了它们。[…] Basic 有一个 with 语句,在许多语言中都有 with 语句。但它们的功能不同,它们都只是做一些非常浅显的事情,它们可以避…...

【自然语言处理七-经典论文-attention is all you need】
然语言处理七-经典论文-attention is all you need 摘要原文译文小结 1:引言原文译文小结 2:背景原文译文小结 3:模型架构原文译文小结 3.1 编码器和解码器原文译文小结 3.2 注意力原文译文小结3.2.1 缩放点积注意力原文总结 3.2.2 多头注意力…...

【嵌入式】STM32和I2C通信
一、简介 I2C(Inter IC Bus)是有飞利浦公司开发的一种通用数据总线,主要通过两个通信线SCL和SDA进行通信,其中SCL(Serial Clock)是时钟线,用于收发双方同步数据,SDA(Serial Data)是数据线,用于传输数据。是一种同步半…...

如何使用Harmony OS控制外设——输入输出?
相关知识点 Hi3861开发板第一个示例程序演示 熟悉使用DevEco Device Tool插件进行程序烧录 熟悉串口调试工具sscom的使用 官方文档中控制核心板上LED的led_example.c讲解及演示 源码路径:applications/sample/wifi-iot/app/iothardware/led_example.cHarmony OS …...
1.1-数组-704. 二分查找★
704. 二分查找 ★ 力扣题目链接,给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,搜索 nums 中的 target,如果存在返回下标,否则返回 -1。n 将在 [1, 10000]之间。 可以假设 nums 中的所…...

人物百度百科怎么做?需要什么资料?
在互联网时代,百度百科作为国内最具权威性的知识分享平台,吸引了大量用户关注和参与。究竟哪些人适合创建和编辑人物百度百科呢?本文伯乐网络传媒将为您揭秘人物百度百科的适用人群,并详细介绍如何注册、登录、创建及维护人物百度…...

在基于Android相机预览的CV应用程序中使用 OpenCL
查看:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9.0在Android 开发简介 下一篇:在 MacOS 中安装 本指南旨在帮助您在基于 Android 相机预览的 CV 应用程序中使用 OpenCL ™。教程是为 Android Studio 20…...

网络分类简述与数据链路层协议(PPP)
实验拓扑 实验要求 1、R1和R2使用PPP链路直连,R2和R3把2条PPP链路捆绑为PPP MP直连按照图示配置IP地址 2、R2对R1的PPP进行单向chap验证 3、R2和R3的PPP进行双向chap验证 实验思路 给R1、R2的S3/0/0接口配置IP地址,已给出网段192.168.1.0/24R2作为主…...

Linux文件系列:磁盘,文件系统,软硬链接
Linux文件系列:磁盘,文件系统,软硬链接 一.磁盘相关知识1.磁盘机械构成2.磁盘物理存储3.磁盘逻辑存储1.LBA地址2.磁盘的分区和分组 二.文件系统和inode1.inode结构体2.文件系统1.Super Block(超级块)2.Group Descriptor Table(块组描述表GDT)3.inode Table4.Data Blocks5.Block…...

GPT4.0
GPT4.0 支持官网所有功能以及所有第三方GPTS,完全同步官网。无需魔法,填写授权码直达官网。全天超18小时维护,无需担心不稳定。没有永久卡,3.5免费提供,4.0可以按需下单即可,不存在跑路。 需要的联系...

软件工程(双语)
教材《软件工程 实践者的研究方法》 双语教学,但目前感觉都是在讲没用的 ”过程决定质量,复用决定效率” 介绍 软工的本质 程序数据结构算法 软件程序文档(需求、模型、说明书) 软件应用: 系统软件 应用 工程/科学…...

网络——套接字编程UDP
目录 端口号 源端口号和目的端口号 认识TCP协议和UDP协议 网络字节序 socket编程接口 socket常见接口 sockaddr结构 UDP socket bind recvfrom sendto 编写客户端 绑定INADDR_ANY 实现聊天功能 端口号 在这之前我们已经说过源IP地址和目的IP地址,还有…...
FPGA_AD9361
1.集成12位DAC和ADC的一款器件,2个输入模拟通道和2个输出模拟通道 2.• TX频段:47 MHz至6.0 GHz • RX频段:70 MHz至6.0 GHz 3.SPI配置成LVDS或CMOS接口,也可以还可以选择FDD(频分双工——全双工,操作时需…...

探讨Java代码混淆加固工具
摘要 本篇博客将介绍几种常用的Java代码混淆工具,如ProGuard、Allatori Java Obfuscator、VirboxProtector、ipaguard和DashO。我们将深入探讨它们的特点、功能以及在保护Java应用程序安全方面的作用。此外,还将强调在使用Java代码混淆工具时需要注意的安…...

Linux——du, df命令查看磁盘空间使用情况
一、实现原理: df 命令的全称是Disk Free ,显而易见它是统计磁盘中空闲的空间,也即空闲的磁盘块数。它是通过文件系统磁盘块分配图进行计算出的。 du 命令的全称是 Disk Used ,统计磁盘有已经使用的空间。它是直接统计各文件各目…...

数据库实验(一)SQL Server触发器
目录 触发器的定义 触发器和存储过程的区别 触发器的优点 触发器的作用 触发器的分类 DML触发器 DDL触发器 登录触发器 触发器的工作原理 inserted表 deleted表 创建触发器 编程要求 测试要求: 实验代码: 触发器的定义 触发器是建立在触…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...

Modbus转ETHERNET IP网关:快速冷却系统的智能化升级密钥
现代工业自动化系统中,无锡耐特森Modbus转Ethernet IP网关MCN-EN3001扮演着至关重要的角色。通过这一技术,传统的串行通讯协议Modbus得以在更高速、更稳定的以太网环境中运行,为快速冷却系统等关键设施的自动化控制提供了强有力的支撑。快速冷…...

【人工智能 | 项目开发】Python Flask实现本地AI大模型可视化界面
文末获取项目源码。 文章目录 项目背景项目结构app.py(后端服务)index.html(前端界面)项目运行项目图示项目源码项目背景 随着人工智能技术的快速发展,大语言模型在智能交互领域展现出巨大潜力。本项目基于 Qwen3-1.7B 模型,搭建一个轻量化的智能聊天助手,旨在为用户提…...

Vue ④-组件通信 || 进阶语法
组件三大部分 template:只有能一个根元素 style:全局样式(默认):影响所有组件。局部样式:scoped 下样式,只作用于当前组件 script:el 根实例独有,data 是一个函数,其他配置项一致…...

vmware 设置 dns
vmware 设置 dns 常用的 DNS(Domain Name System)服务器地址可以帮助你更快、更安全地解析域名。以下是一些国内外常用的公共 DNS 服务: 国内常用 DNS 阿里云 DNS IPv4: 223.5.5.5、223.6.6.6IPv6: 2400:3200::1、2400:3200:baba::1特点&am…...

K8S认证|CKS题库+答案| 4. RBAC - RoleBinding
目录 4. RBAC - RoleBinding 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、查看SA和role 3)、编辑 role-1 权限 4)、检查role 5)、创建 role和 rolebinding 6࿰…...
Elasticsearch:spring2.x集成elasticsearch8.x
相关安装就不介绍了直接代码集成 <!-- elasticsearch版本需要和你安装的版本一致 --><properties><elasticsearch.version>8.11.1</elasticsearch.version><jakarta-json.version>2.1.2</jakarta-json.version><logstash.version>7…...
知识拓展卡————————关于Access、Trunk、Hybrid端口
目录 什么是Trunk List、VLAN ID、PVID: VLAN ID(Virtual Local Area Network Identifier): Trunk List(Trunk列表): PVID(Prot VLAN ID): 关于Native VLAN &#x…...
Mysql批处理写入数据库
在学习mybatisPlus时,看到一个原本没用过的参数: rewriteBatchedStatementstrue 将上述代码装入jdbc的url中即可使数据库启用批处理写入。 需要注意的是,这个参数仅适用于MySQL JDBC 驱动的私有扩展参数。 作用原理是: 原本的…...