【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表 创建触发器 编程要求 测试要求: 实验代码: 触发器的定义 触发器是建立在触…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门  获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
