Leetcode - 周赛390

目录

一,3090. 每个字符最多出现两次的最长子字符串

二,3091. 执行操作使数据元素之和大于等于 K

三,3092. 最高频率的 ID

四,3093. 最长公共后缀查询


一,3090. 每个字符最多出现两次的最长子字符串

本题是一道标准的滑动窗口问题,代码如下: 

class Solution {public int maximumLengthSubstring(String s) {char[] ch = s.toCharArray();int[] cnt = new int[26];int ans = 0;for(int l=0, r=0; r<ch.length; r++){cnt[ch[r]-'a']++;while(cnt[ch[r]-'a']>2){cnt[ch[l]-'a']--;l++;}ans = Math.max(ans, r-l+1);}return ans;}
}

二,3091. 执行操作使数据元素之和大于等于 K

本题是一道贪心题,由题可知,只有先执行+1操作,再执行复制操作,它的操作次数才是最少的,又因为本题的数据范围不大,所以可以使用枚举的方式来求最小值,代码如下:

class Solution {public int minOperations(int k) {int ans = Integer.MAX_VALUE;for(int i=1; i<50000; i++){// i-1 表示 i 执行 +1 操作的次数// (k-i-1)/i+1 表示执行 复制 操作的次数ans = Math.min(ans, (i-1)+(k-i-1)/i+1);}return ans;}
}

上述的公式可以化简成 i + (k-1)/i - 1,从数学的角度来看,这就是 y = x + (k-1)/x + c 函数,所以由函数特点可知,要使 y 最小,x = k-1开根号,又因为题目中的 x 必须为正整数,所以需要求 x 左右两侧的正整数。函数图像:

代码如下:

class Solution {public int minOperations(int k) {int rt = Math.max((int)Math.sqrt(k-1),1);return Math.min(rt-1+(k-1)/rt, rt+(k-1)/(rt+1));}
}

三,3092. 最高频率的 ID

本题求的是ID出现次数最多的出现次数,注意返回的是出现次数,不是ID,这里有两种写法:

1)哈希表 + 有序集合

使用哈希表存储 < ID,ID出现次数 >,使用有序集合存储 < ID出现次数,ID出现次数的次数>,根据题目要求进行模拟,代码如下:

class Solution {public long[] mostFrequentIDs(int[] nums, int[] freq) {int n = nums.length;Map<Integer, Long> map = new HashMap<>();TreeMap<Long, Integer> tree = new TreeMap<>();long[] ans = new long[n];for(int i=0; i<n; i++){int x = nums[i];if(map.containsKey(x) && tree.containsKey(map.get(x))){if(tree.get(map.get(x))-1 == 0)tree.remove(map.get(x));elsetree.put(map.get(x), tree.get(map.get(x))-1);}map.put(x, map.getOrDefault(x,0L)+freq[i]);tree.put(map.get(x), tree.getOrDefault(map.get(x),0)+1);ans[i] = tree.lastKey();}return ans;}
}

2)哈希表 + 懒删除堆

和上面那种方法一样,只不过这里使用堆来维护最大的出现次数,此外堆里存储的内容和上文不同,堆里存储的是 < ID出现的次数,ID >,(注:这里使用最大堆,可以通过pop直接得到最大值,如果使用最小堆可能会超时)代码如下:

class Solution {public long[] mostFrequentIDs(int[] nums, int[] freq) {int n = nums.length;long[] ans = new long[n];Map<Long, Long> map = new HashMap<>();PriorityQueue<Long[]> que = new PriorityQueue<>((x,y)->Long.compare(y[0],x[0]));for(int i=0; i<n; i++){long x = nums[i];map.put(x, map.getOrDefault(x,0L)+freq[i]);que.offer(new Long[]{map.get(x), x});while(!map.get(que.peek()[1]).equals(que.peek()[0])){que.poll();}ans[i] = que.peek()[0]; }return ans;}
}

四,3093. 最长公共后缀查询

本题求最长公共后缀的数组下标,是一道典型的字典树题,不懂的可以看Leetcode - 周赛385那篇博客,节点中需要存储的内容需要变一下,存储一下数组长度及其下标,代码如下:

class Solution {static class Node{Node[] node = new Node[26];int len;//最短长度int idx;//下标}public int[] stringIndices(String[] wordsContainer, String[] wordsQuery) {int n = wordsContainer.length;Node root = new Node();int min = wordsContainer[0].length();int k = 0;//求如果没有公共后缀时,它的结果为最短长度&最靠前的数组下标//后缀字典树for(int i=0; i<n; i++){String s = wordsContainer[i];if(min > s.length()){min = s.length();k = i; }char[] ch = s.toCharArray();Node cur = root;for(int j=ch.length-1; j>=0; j--){int index = ch[j]-'a';if(cur.node[index]==null){cur.node[index] = new Node();cur.node[index].len = s.length();cur.node[index].idx = i;}if(cur.node[index].len > s.length()){cur.node[index].len = s.length();cur.node[index].idx = i;}cur = cur.node[index];}}int m = wordsQuery.length;int[] ans = new int[m];Arrays.fill(ans, -1);for(int i=0; i<m; i++){Node cur = root;String s = wordsQuery[i];char[] ch = s.toCharArray();for(int j=ch.length-1; j>=0; j--){int index = ch[j]-'a';if(cur.node[index]==null){if(ans[i] == -1)ans[i] = k;break;}else{ans[i] = cur.node[index].idx;cur = cur.node[index];}}}return ans;}
}

 

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

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

相关文章

嵌入式C语言中头文件计设规则方法

我是阿梁,最近在负责的项目代码,也算是祖传代码了,里面有很多头文件嵌套的情况,即a.h包含b.h,b.h又包含c.h,c.h又包含d.h......遂找到一份华子的C语言编程规范学习一下,并结合自己的理解写成这篇文章,以规范自己的代码。 1. 头文件嵌套的缺点 依赖:若x.h包含了y.h,则…

启信宝商业大数据助力全国经济普查

近日&#xff0c;合合信息旗下启信宝收到中国青年创业就业基金会感谢信&#xff0c;对启信宝协同助力全国经济普查和服务青年创业就业研究表达感谢。 第五次全国经济普查是新时代新征程上一次重大国情国力调查&#xff0c;是对国民经济“全面体检”和“集中盘点”&#xff0c;…

武汉星起航:亚马逊受惠国家政策,企业成长与行业发展齐头并进

亚马逊电商平台作为国际知名的跨境电商巨头&#xff0c;在中国市场也展现出了强劲的发展势头。近年来&#xff0c;国家政策对亚马逊电商平台的支持力度不断加大&#xff0c;为企业提供了良好的发展环境和机遇。武汉星起航将探讨国家政策对亚马逊电商平台的重要影响&#xff0c;…

深度思考:雪花算法snowflake分布式id生成原理详解

雪花算法snowflake是一种优秀的分布式ID生成方案&#xff0c;其优点突出&#xff1a;它能生成全局唯一且递增的ID&#xff0c;确保了数据的一致性和准确性&#xff1b;同时&#xff0c;该算法灵活性强&#xff0c;可自定义各部分bit位&#xff0c;满足不同业务场景的需求&#…

QT使用数据库

数据库就是保存数据的文件。可以存储大量数据&#xff0c;包括插入数据、更新数据、截取数据等。用专业术语来说&#xff0c;数据库是“按照数据结构来组织、存储和管理数据的仓库”。 什么时候需要数据库&#xff1f;在嵌入式里&#xff0c;存储大量数据&#xff0c;或者记录数…

【项目技术介绍篇】若依开源项目RuoYi-Cloud后端技术介绍

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

双端队列deque和vector以及list的优缺点比较

参考:https://blog.csdn.net/TWRenHao/article/details/123483085 一、vector vector具体用法详情点这里 优点&#xff1a; 支持随机访问 CPU高速环缓存命中率很高 缺点&#xff1a; 空间不够&#xff0c;便需要增容。而增容代价很大&#xff0c;还存在一定的空间浪费。 头部…

在同一个网站上自动下载多个子页面内容

一、问题现象 第一次遇到这样的问题&#xff0c;如下图&#xff1a; 即在同一个网站上下载多个内容时&#xff0c;第一个内容明明已经正常get到了&#xff0c;但开始第二个页面的查询 以后&#xff0c;原来已经查出的内容就找不到了。 二、解决办法 我不知道大家是不是遇到…

C++项目——集群聊天服务器项目(七)Model层设计、注册业务实现

在前几节的研究中&#xff0c;我们已经实现网络层与业务层分离&#xff0c;本节实现数据层与业务层分离&#xff0c;降低各层之间的耦合性&#xff0c;同时实现用户注册业务。 网络层专注于处理网络通信与读写事件 业务层专注于处理读写事件到来时所需求的各项业务 数据层专…

msvcr110.dll文件丢失要怎么办?教你多种解决msvcr110.dll文件的方法

面对“程序无法启动&#xff0c;因为电脑中缺失msvcr110.dll”的错误提示&#xff0c;你可能会觉得你的工作或者休闲时间被意外中断了&#xff0c;这确实很让人烦恼。这种问题对于很多Windows用户来说并不陌生&#xff0c;但幸运的是&#xff0c;它通常可以通过几个简单的步骤得…

node.js学习(2)

版权声明 以下文章为尚硅谷PDF资料&#xff0c;B站视频链接&#xff1a;【尚硅谷Node.js零基础视频教程&#xff0c;nodejs新手到高手】仅供个人学习交流使用。如涉及侵权问题&#xff0c;请立即与本人联系&#xff0c;本人将积极配合删除相关内容。感谢理解和支持&#xff0c;…

Python3:ModuleNotFoundError: No module named ‘elftools‘

问题背景 问题 ModuleNotFoundError: No module named ‘elftools’ 解决方法 pip3 install pyelftools 成功&#xff01;&#xff01;&#xff01;

哲♂学家带你深♂入理解c语言的编译与链接

目录 前言&#xff1a; 一、翻译环境 二、预处理 三、编译 1.词法分析 2.语法分析 3、语义分析 四、汇编 五、链接 总结&#xff1a; 前言&#xff1a; 编译和链接能够帮我们更好的理解c语言中程序执行前是如何运行的&#xff0c;今天由本哲学家带你深入理解c语言的编译…

iOS - Runloop的运行逻辑

文章目录 iOS - Runloop的运行逻辑1. 苹果官方的Runloop执行图2. Mode里面的东西2.1 Source02.2 Source12.3 Timers2.4 Observers 3. 执行流程3.1 注意点 4. Runloop休眠 iOS - Runloop的运行逻辑 1. 苹果官方的Runloop执行图 2. Mode里面的东西 2.1 Source0 触摸事件处理pe…

Unity Mesh 生成图形(一)

目录 一、概述 二、获取顶点坐标和索引 三、绘制正方形 1.显示顶点坐标 2.顶点坐标的顺序 3.顶点排序 4.绘制最终效果 结束 一、概述 Unity 的 Mesh 是用于表示三维物体的网格数据结构。它是由一系列顶点和三角形组成的网格&#xff0c;用于描述物体的形状和外观。 M…

Java8之接口默认方法

Java8之接口默认方法 一、介绍二、代码1、接口2、实现类3、测试代码4、效果 一、介绍 在Java8中&#xff0c;允许为接口方法提供一个默认的实现。必须用default修饰符标记这样一个方法。默认方法也可以调用其他方法 二、代码 1、接口 public interface PersonService {void…

python 进程、线程、协程基本使用

1、进程、线程以及协程【1】进程概念【2】线程的概念线程的生命周期进程与线程的区别 【3】协程(Coroutines) 2、多线程实现【1】threading模块【2】互斥锁【3】线程池【4】线程应用 3、多进程实现4、协程实现【1】yield与协程【2】asyncio模块【3】3.8版本【4】aiohttp 1. 并发…

EasyDarwin 、ffmpeg 音视频推流拉流;OBS视频推理软件、obs-rtspserver服务器;python读取rtsp流

参考&#xff1a;https://blog.csdn.net/N71FS1/article/details/130019563 一、EasyDarwin ffmpeg ffmpeg 推送音视频流到rtsp流服务器 EasyDarwin 作为rtsp流服务器 &#xff08;下载&#xff1a;https://www.easydarwin.org/p/easydarwin.html&#xff09;OBS 直播音视频录…

是德科技keysight N9000B 信号分析仪

181/2461/8938产品概述&#xff1a; 工程的内涵就是将各种创意有机地联系起来&#xff0c;并解决遇到的问题。 CXA 信号分析仪具有出色的实际性能&#xff0c;它是一款出类拔萃、经济高效的基本信号表征工具。 它的功能十分强大&#xff0c;为一般用途和教育行业的用户执行测试…

【Linux】体验一款开源的Linux服务器运维管理工具

今天为大家介绍一款开源的 Linux 服务器运维管理工具 - 1panel。 一、安装 根据官方那个提供的在线文档&#xff0c;这款工具的安装需要执行在线安装&#xff0c; # Redhat / CentOScurl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start…