Leetcode - 周赛416

news2024/12/22 3:00:28

目录

一,3295. 举报垃圾信息

二,3296. 移山所需的最少秒数

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

四,3298. 统计重新排列后包含另一个字符串的子字符串数目 II


一,3295. 举报垃圾信息

本题就是求message中是否至少存在2两个单词在banndedWord中,我们可以直接使用hash记录banndedWord中的字符串,再枚举message,使用cnt记录有几个单词在哈希表中,最后返回 cnt > 1.

代码如下:

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

二,3296. 移山所需的最少秒数

本题有两种做法:

1.最小堆

维护每个工人降低山的高度 x 所花费的时间,直到山的高度为0,返回堆顶的元素。

class Solution {
    public long minNumberOfSeconds(int mountainHeight, int[] workerTimes) {
        PriorityQueue<long[]> que = new PriorityQueue<>((x,y)->Long.compare(x[0], y[0]));
        for(long x : workerTimes){
            que.offer(new long[]{x, 1L, x});//时间,降低h,倍率
        }
        long ans = 0;
        while(mountainHeight-- > 0){
            long[] t = que.poll();
            long x = t[0], h = t[1], base = t[2];
            ans = x;
            que.offer(new long[]{x+(h+1)*base, h+1, base});
        }
        return ans;
    }
}

2.二分答案

给的时间越长,工人就越可能完成移山,具有单调性,可以二分,接下来就是如何判断二分的时间 t 是否能完成移山,假设 x = workertimes[i],能减低的山的高度为 h,我们可以得到这个方程 (h+1)*h/2*x = t,化简得到 h^2 + h - 2*t/x = 0,通过一元二次方程求根公式x = -b+sqrt(b^2-4ac)/2a 或者-b-sqrt(b^2-4ac)/2a(由于答案为正整数,舍去), 求解 h = -1 + sqrt(1+8*t/x))/2,然后将所有工人在 t 时间内所能降低的山的高度加起来,如果 < mountainHeight,l = mid + 1,否则 r = mid - 1.

class Solution {
    public long minNumberOfSeconds(int mountainHeight, int[] workerTimes) {
        long ans = 0;
        long l = 1, r = (long)(mountainHeight+1)*mountainHeight / 2 * workerTimes[0]; 
        while(l <= r){
            long mid = (l + r) / 2;
            if(check(mid, mountainHeight, workerTimes))
                r = mid - 1;
            else
                l = mid + 1;
        }
        return r + 1;
    }
    boolean check(long t, int h, int[] w){
        int ans = 0;
        for(int x : w){
            ans += Math.max(0, (int)(-1 + (int)Math.sqrt(1+8*t/x))/2);
        }
        return ans >= h;
    }
}

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

本题题意就是找word1中有多少个子字符串,且都要包含word2中的每个字符。直接使用滑动窗口来做。先使用一个数组cnt记录word2中每个字符出现的次数。枚举word1中子字符串的右端点,如果[L,R]的字符串中包含word2中的每个字符,我们就可以移动左端点,直到不满足条件为止,也就是说以L为左端点时,右端点[R,n)都满足条件,这时将 ans += n - R,代码如下:

class Solution {
    public long validSubstringCount(String word1, String word2) {
        char[] w1 = word1.toCharArray();
        char[] w2 = word2.toCharArray();
        int[] cnt = new int[26];
        for(char c : w2){
            cnt[c-'a']++;
        }
        long ans = 0;
        for(int l=0, r=0; r<w1.length; r++){
            boolean flg = false;
            char c = w1[r];
            cnt[c-'a']--;
            for(int i=0; i<26; i++){
                if(cnt[i] > 0) 
                    flg = true; 
            }
            if(flg) continue;
            while(cnt[w1[l]-'a'] <= 0){
                ans += w1.length - r;
                if(++cnt[w1[l++]-'a'] > 0) break;
            }
        }
        return ans;
    }
}

四,3298. 统计重新排列后包含另一个字符串的子字符串数目 II

本题与T3相同,不过数据范围更大,这里我们再讲一个O(n)做法,T3的做法是O(26n),也就是判断子字符串是否包含所有word2需要枚举cnt数组,其实我们可以额外添加一个变量less,记录word2中几个不同的字符。当word1子字符串中包含了n个x字符(word2中存在n个x字符)时,即cnt[x-'a']=0时,less--,那么 less = 0 说明该字符串满足条件。

代码如下:

class Solution {
    public long validSubstringCount(String word1, String word2) {
        char[] w1 = word1.toCharArray();
        char[] w2 = word2.toCharArray();
        int[] cnt = new int[26];
        for(char c : w2){
            cnt[c-'a']++;
        }
        int less = 0;
        for(int x : cnt){
            if(x > 0){
                less++;
            }
        }
        long ans = 0;
        for(int l=0, r=0; r<w1.length; r++){
            char c = w1[r];
            if(--cnt[c-'a'] == 0) less--;//只有原来cnt[x]>0(即删去的全是word2中存在的字符时),less--
            while(less == 0){  
                ans += w1.length - r; 
                if(++cnt[w1[l++]-'a'] > 0){
                    less++;
                }   
            }
        }
        return ans;
    }
}

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

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

相关文章

首个端到端自动驾驶背景下对抗性训练研究

更多优质内容&#xff0c;请关注公众号&#xff1a;智驾机器人技术前线 1.论文信息 论文标题&#xff1a;Module-wise Adaptive Adversarial Training for End-to-end Autonomous Driving 作者&#xff1a;Tianyuan Zhang, Lu Wang, Jiaqi Kang, Xinwei Zhang, Siyuan Liang,…

(done 意义不明的公式) 声音信号处理基础知识(10) (Demystifying the Fourier Transform: The Intuition)

参考&#xff1a;https://www.youtube.com/watch?vXQ45IgG6rJ4 就像棱镜可以把可见光分解为不同波长的光一样&#xff0c;FT 做的事情就是把复杂的声波转为不同频率的声波 FT 可以把时域信息转为频域信息 以下是对于 FT 的一些 intuition-level 的理解&#xff1a; 1.FT 会…

2.4K star的GOT-OCR2.0:端到端OCR 模型

GOT-OCR2.0是一款新一代的光学字符识别&#xff08;OCR&#xff09;技术&#xff0c;标志着人工智能在文本识别领域的重大进步。作为一款开源模型&#xff0c;GOT-OCR2.0不仅支持传统的文本和文档识别&#xff0c;还能够处理乐谱、图表以及复杂的数学公式&#xff0c;为用户提供…

如何使用ssm实现基于JavaWeb的个人健康信息管理系统

TOC ssm701基于JavaWeb的个人健康信息管理系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#x…

大模型如何赋能智慧城市新发展?

国家数据局近期发布的《数字中国发展报告&#xff08;2023&#xff09;》显示&#xff0c;我国数据要素市场化改革步伐进一步加快&#xff0c;数字经济规模持续壮大&#xff0c;数字技术应用场景不断拓展。这一成就的背后是数字技术广泛应用&#xff0c;数字技术不仅影响着老百…

12.系统架构分析师应该懂的项目管理知识

进度管理 进度管理就是采用科学的方法&#xff0c;确定进度目标&#xff0c;编制进度计划和资源供应计划&#xff0c;进行进度控制&#xff0c;在与质量、成本目标协调的基础上&#xff0c;实现工期目标。具体来说&#xff0c;包含以下过程&#xff1a; 活动定义&#xff1a;…

智算中心动环监控:构建高效、安全的数字基础设施@卓振思众

在当今快速发展的数字经济时代&#xff0c;智算中心作为人工智能和大数据技术的核心支撑设施&#xff0c;正日益成为各行业实现智能化转型的重要基石。为了确保这些高性能计算环境的安全与稳定&#xff0c;卓振思众动环监控应运而生&#xff0c;成为智算中心管理的重要组成部分…

小红书,努力成为小红书

【潮汐商业评论/原创】 Lisa作为时尚达人&#xff0c;小红书就是她成长路上的「电子闺蜜」&#xff0c;“想买衣服了&#xff0c;去小红书搜一下&#xff1b;晚饭不知道吃什么&#xff0c;去小红书搜搜看&#xff1b;最近我又小红书上在研究MBTI。” “离了小红书真是不能活&…

[笔记]数据结构

文章目录 堆排序215 数组中第k个最大元素 堆排序 堆排序方法对于记录数较少的文件并不值得提倡&#xff0c;但对n较大的文件还是有效 运行时间主要耗费在&#xff1a; 建立初始堆调整建立新堆 反复筛选 筛选算法进行的关键字比较次数至多为&#xff1a; 2 ( k − 1 ) 2(k-1)…

9.26作业

C 面试题 1,什么是虚函数?什么是纯虚函数? 虚函数&#xff1a;父子类中&#xff0c;在父类中的函数需要在子类中进行重写&#xff0c;重写后父子类空间中使用的都是重写后的函数&#xff0c;该函数就是虚函数&#xff0c;虚函数的声明需要在函数前加virtual。 纯虚函数&…

Trace纳米侦查无人机技术详解

纳米无人机&#xff0c;作为微型无人机的一种&#xff0c;通常指尺寸和重量都非常小的无人机&#xff0c;其重量一般不超过几百克&#xff0c;甚至更小。这类无人机由于体积小、重量轻&#xff0c;具备高度的隐蔽性和灵活性&#xff0c;在军事侦察、环境监测、搜救行动等领域具…

数值计算 --- 平方根倒数快速算法(上)

平方根倒数快速算法(上) --- 向Greg Walsh致敬&#xff01; 写在最前面 --- 一场关于平方根倒数快速算法作者的讨论&#xff1a; 上图中的这段代码出自一个早期的3D游戏<雷神之锤>的源代码&#xff0c;它实现的功能就是计算一个数x的平方根的倒数&#xff1a; 这段代码之…

如何投IEEE论文(Transactions on Cybernetics为例)

文章目录 0. 建议先看看投稿要求1.下载对应的论文模板2.进入提交论文信息的界面3.填写论文中必要的信息3.1 Article Type3.2 Upload Manuscript3.3 Title3.4 Abstract3.5 Authors3.6 Author Details3.7 Math Organizations3.8 Additional Information3.9 Final Review 终审 0. …

计算1 / 1 - 1 / 2 + 1 / 3 - 1 / 4 + 1 / 5 …… + 1 / 99 - 1 / 100 的值,打印出结果

我们写这道题的时候需要俩变量接受&#xff0c;一个总数一个分母&#xff0c;我们发现分母变化是有规律的从1~100循环。 #include<stdio.h> int main() {int i 0;int tag 1;double sum 0.0;for (i 1; i < 101; i){if (i % 2 0){sum sum - 1.0 / i;}else{sum s…

实力!云起无垠荣获“创业邦2024年AIGC创新企业及产品创新”双奖

近日&#xff0c;国际创新生态服务平台创业邦郑重发布 “2024 年 AIGC 创新企业及产品创新榜单”。云起无垠凭借卓越的企业能力与突出的产品创新&#xff0c;成功入选 “2024 年 AIGC 创新企业 100 强” 以及 “2024 年 AIGC 产品创新 100 强”。 本次评选采用内部初审与外部专…

深入分析MySQL事务日志-Undo Log日志

文章目录 InnoDB事务日志-Undo Log日志2.1 Undo Log2.1.1 Undo Log与原子性2.1.2 Undo的存储格式1&#xff09;insert类型Undo Log2&#xff09;delete类型Undo Log3&#xff09;update类型Undo Log 2.1.3 Undo Log的工作原理2.1.4 Undo Log的系统参数2.1.5 Undo Log与Purge线程…

【Linux 报错】vim 保存文件时出现 E45: ‘readonly‘ option is set (add ! to override)

一、错误原因 该错误表明当前你尝试保存的是一个 只读文件&#xff0c;该文件权限设置为只读&#xff0c;具有只读的标识 系统为了防止你意外修改该只读文件&#xff0c;因此会阻止对只读文件的保存&#xff08;他怕你修改了你还保存&#xff0c;破坏了只读属性&#xff09; …

媒界:2025河南台球及配套设施展会3月举办

立足中原&#xff0c;辐射全国&#xff0c;壹肆柒中国国际台球产业博览会3月在郑州盛大举办&#xff1b; 2025中国&#xff08;郑州&#xff09;国际台球产业博览会&#xff08;壹肆柒台球展&#xff09; The 2025 China (Zhengzhou) International Billiards Industry Expo …

2021年的burpsuite安装。

安装burpsuite 很简单的。 1.要有java环境&#xff0c;也就是jdk&#xff0c;并且jdk版本要与burpsuite要对应。&#xff08;如果你的bp安装不起&#xff0c;可能是你的jdk版本不对&#xff09; 2.就是按照我都步骤走就行。 3.下载完文件之后&#xff0c;全程离线操作 说明一下…

spring boot 项目如何使用jasypt加密

1.首先&#xff0c;添加jasypt依赖 <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.0</version></dependency> 2.然后winr&#xff0c;cmd调出窗…