【LeetCode周赛】第 416 场

news/2024/9/24 11:28:01/

3295. 举报垃圾信息

给你一个字符串数组 message 和一个字符串数组 bannedWords。
如果数组中 至少 存在两个单词与 bannedWords 中的任一单词 完全相同,则该数组被视为 垃圾信息。
如果数组 message 是垃圾信息,则返回 true;否则返回 false。


思路:空间换时间,使用集合set存储bannedWords。
复杂度:O(n)

class Solution {public boolean reportSpam(String[] message, String[] bannedWords) {Set<String> set = new HashSet();for(String ban:bannedWords) {set.add(ban);}int cnt = 0;for(String msg:message) {if(set.contains(msg)) {cnt ++;if(cnt>=2) return true;}}return false;}
}

3296. 移山所需的最少秒数

给你一个整数 mountainHeight 表示山的高度。
同时给你一个整数数组 workerTimes,表示工人们的工作时间(单位:秒)。
工人们需要 同时 进行工作以 降低 山的高度。对于工人 i :
山的高度降低 x,需要花费 workerTimes[i] + workerTimes[i] * 2 + … + workerTimes[i] * x 秒。例如:
山的高度降低 1,需要 workerTimes[i] 秒。
山的高度降低 2,需要 workerTimes[i] + workerTimes[i] * 2 秒,依此类推。
返回一个整数,表示工人们使山的高度降低到 0 所需的 最少 秒数。


思想:使用PriorityQueue。具体来说,PriorityQueue存储一个长度为3的数组nums[3],其中nums[0]存储下一次该位需要的时间,nums[1]存储workTimes[i],nums[2]存储下一次需要几个workTimes[i]。每次选取PriorityQueue最小的的nums[0],ans为其中最大的,然后将nums[0]更新。
复杂度:O(n)。

class Solution {public long minNumberOfSeconds(int mountainHeight, int[] workerTimes) {Queue<Long[]> q = new PriorityQueue<>((a, b)->Long.compare(a[0], b[0]));// Arrays.sort(workerTimes);long ans = 0;for(int i=0; i<workerTimes.length; i++) {// 在下降一米所用, 速度, 用时q.offer(new Long[]{Long.valueOf(workerTimes[i]), Long.valueOf(workerTimes[i]), Long.valueOf(2)});}for(int i=0; i<mountainHeight; i++) {Long[] nd = q.poll();ans = Math.max(ans, nd[0]);nd[0] = nd[0] + nd[1]*nd[2];nd[2] ++;q.offer(nd);            }return ans;}
}

3297. 统计重新排列后包含另一个字符串的子字符串数目 I

给你两个字符串 word1 和 word2 。
如果一个字符串 x 重新排列后,word2 是重排字符串的
前缀 ,那么我们称字符串 x 是 合法的 。
请你返回 word1 中 合法
子字符串 的数目。


思路:滑动窗口,划出可以满足条件的窗口,然后窗口左端左移得到此刻最小的窗口,将left加入到答案。
复杂度:O(n).

class Solution {public long validSubstringCount(String word1, String word2) {// 滑动窗口,每一种符合条件的最小子串可以衍生出left个// w1和w2中每种字符数量int[] acnts = new int[128];int[] bcnts = new int[128];for(char c:word2.toCharArray()) {bcnts[c] ++;}int n = word1.length();long ans = 0;int l=0;// 以右端点为起点for(int r=0; r<n; r++) {acnts[word1.charAt(r)] ++;// w2中每个字符w1中都有时,尝试左移窗口变小,成为目前最短的子串while(check(acnts, bcnts)) {acnts[word1.charAt(l)] --;l ++;}ans += l;}return ans;}public boolean check(int[] acnts, int[] bcnts) {for(int i=0; i<128; i++) {if(acnts[i]<bcnts[i]) return false;}return true;}
}

优化:将两个统计字符的数组优化为一个。具体来说,cnts只记录word2中的字符,less记录不同字符的数量。窗口右移,对应的cnts的字符减一,注意words中没有的字符此时会减为负数,有的字符的cnts减为0时,less减一。less为0说明,是满足条件的窗口,尝试左移窗口左端,注意此时left对应的cnts为0,表明为word2中有的字符,less要加一,将left对应的字符加一。

class Solution {public long validSubstringCount(String word1, String word2) {// 滑动窗口,每一种符合条件的最小子串可以衍生出left个// w1和w2中每种字符数量int[] bcnts = new int[26];for(char c:word2.toCharArray()) {bcnts[c-'a'] ++;}int n = word1.length();long ans = 0;int l=0;// less表示w2中有多少个不同的字符int less = 0;for(int c:bcnts) {if(c>0) less ++;}// 以右端点为起点for(int r=0; r<n; r++) {// 未出现的字符的次数会变为负数if(--bcnts[word1.charAt(r)-'a'] == 0 ) {less --;}// w2中每个字符w1中都有时,尝试左移窗口变小,成为目前最短的子串while(less == 0) {// 当前次数为0,必是需要的if(bcnts[word1.charAt(l++)-'a']++ == 0) {less ++;} }ans += l;}return ans;}}

http://www.ppmy.cn/news/1529796.html

相关文章

Python: networkx绘图

Python networkx库 1.有向图 # 1.创建一个空的有向图G nx.DiGraph()nodes [A,B,C,D]# 2.添加节点for node in nodes:G.add_node(node)# 3.添加边edges [(A,B),(B,C),(C,D)]for edge in edges:G.add_edge(edge[0],edge[1])# 4.使用spring布局Cpos nx.spring_layout(G)# 5.绘…

全栈开发(三):springBoot3中使用mybatis-plus

MyBatis-Plus &#x1f680; 为简化开发而生 (baomidou.com) 1.配置pom.xml <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency&g…

[Linux]:信号(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 信号的引入 1.1 信号的概念 在Linux系统中&#xff0c;信号&#xff08;…

文件上传js代码

大家好&#xff0c;很久没更新了&#xff0c;今天空了&#xff0c;记录一下文件上传js代码。(自己搭建的网站&#xff0c;演示学习一下这种漏洞&#xff0c;不要做违法的事情&#xff01;&#xff01;&#xff01;) 一般文件上传的话都是奔着getshell去的&#xff0c;但是一般…

02【Matlab系统辨识】白噪声

1.白噪声与有色噪声 1.1 白噪声(white noise) 系统辨识中所用到的数据通常都含有噪声。从工程实际出发&#xff0c;这种噪声往往可以视为具有有理谱密度的平稳随机过程。白噪声是一种最简单的随机过程&#xff0c;是由一系列不相关的随机变量组成的理想化随机过程。白噪声的数…

ubuntu中通过源码安装pointnet2_ops_lib

注&#xff1a;本帖所用环境为&#xff1a;ubuntu 24.04、 cuda 12.04 文章目录 1. 克隆 PointNet 源码库2. 安装依赖3. 编译 pointnet2_ops_lib4. 测试安装 1. 克隆 PointNet 源码库 首先&#xff0c;克隆 PointNet 的 GitHub 仓库&#xff1a; git clone https://github.co…

设计原则模式概览

核心 分清楚哪些是稳定的&#xff0c;哪些是变化的&#xff08;一定有稳定跟变化的成分&#xff09;&#xff1b; 捋清楚哪些是类设计者的责任&#xff0c;哪些是使用者的责任。管理变化&#xff0c;提高复用&#xff01; 违背原则的代价 重新编译&#xff0c;重新测试&#xf…

高维空间的维数灾难问题

高维空间的维数灾难问题是指在处理高维数据时&#xff0c;随着维度的增加&#xff0c;数据的性质发生了显著变化&#xff0c;从而导致许多传统的机器学习和统计方法失效的现象。 主要问题 数据稀疏性&#xff1a; 在高维空间中&#xff0c;数据点之间的距离会变得相对较远&…