Leetcode - 周赛389

目录

一,3083. 字符串及其反转中是否存在同一子字符串

二,3084. 统计以给定字符开头和结尾的子字符串总数

三,3085. 成为 K 特殊字符串需要删除的最少字符数

四,3086. 拾起 K 个 1 需要的最少行动次数


一,3083. 字符串及其反转中是否存在同一子字符串

本题是一道字符串题,问原字符串s中是否存在两个连续的字符,使得这两个字符还存在于s的逆序字符串中,有返回true,没有返回false,直接上代码:

class Solution {public boolean isSubstringPresent(String s) {char[] ch = s.toCharArray();boolean[][] bool = new boolean[26][26];for(int i=1; i<ch.length; i++){int x = ch[i-1]-'a';int y = ch[i]-'a';bool[x][y] = true;if(bool[y][x])return true;} return false;}
}

二,3084. 统计以给定字符开头和结尾的子字符串总数

本题看上去是一道字符串题,实际是一道排列组合题,先算出字符转 s 中出现字符 c 的个数,记作 n ,从这 n 个字符中选取1个或两个,问有多少种情况,代码如下:

class Solution {public long countSubstrings(String s, char c) {long ans = 0;long cnt = 0;for(char ch : s.toCharArray()){if(ch == c)cnt++;}return (cnt+1)*cnt/2;}
}

三,3085. 成为 K 特殊字符串需要删除的最少字符数

 

本题题意:在只能执行删除操作的情况下,问最少删除几个字符,才能满足任意两个字符在字符串word中出现的次数之差要小于等于k。

思路:先统计每一个字符在字符串中的出现次数,再枚举要保留的字符的出现次数,求出要删除字符串的个数,最后在其中找出最小值并返回。

代码如下:

class Solution {public int minimumDeletions(String word, int k) {int[] cnt = new int[26];for(char ch : word.toCharArray()){cnt[ch-'a']++;}int ans = Integer.MAX_VALUE;int sum = 0;Arrays.sort(cnt);for(int i=0; i<26; i++){if(i>0)sum += cnt[i-1];int t = 0;int mx = cnt[i]+k;for(int j=i+1; j<26; j++){if(mx < cnt[j])t += cnt[j]-mx;}ans = Math.min(ans, sum+t);}return ans;}
}

四,3086. 拾起 K 个 1 需要的最少行动次数

本题题意,选择任意一个下标 idx 作为起始点(固定不动),如果nums[idx]==1,就可以不需要操作直接拿到1,nums[idx]重新变成0,可以执行以下操作:

  • 选择任意一个nums[i]==0 && i != idx,将nums[i]变成1,该操作最多执行 maxChange次
  • 选择相邻的两个下标 x,y,且两个值相加必须为1(即一个值为0,另一个值为1),将这两个下标的值交换,如果交换后,nums[idx] == 1,可以拿走1,nums[idx]重新变成0

返回拾起 k 个 1 所需的最少行动次数

可以得到以下拾起1的操作:

  • nums[idx]==1,需要 0 次操作
  • 与nums[idx]相邻的值为1,需要执行1次操作
  • 使用操作一,需要执行2次操作才能拿到1 (1次操作一+1次操作二)
  • 只用操作二,需要执行 |i - idx| 次操作才能拿到1

根据上述操作,可以得出一些操作优先级:

  1. idx,idx+1,idx-1 这些下标的值为1
  2. 执行操作一来获得1
  3. 执行操作二来获得1

先把maxChange比较大的情况处理了,设 c 为连续1的出现次数,如果maxChange >= k - c,说明剩下的 k-c 个 1 可以使用操作一得到,直接返回 2*(k-c)+Math.max(c-1,0)。

如果maxChange比较小,优先执行操作一,也就是说还需要 size = k - maxChange 个 1,因这size个1只能通过操作二获得,所以接下的问题就变成了货舱选址问题,即如何选择一个地点,使得所有的货舱到达该地点的距离之和最小,这里直接告诉你们结论,选择中位数的地方。

注:可能会疑惑为什么这里没有优先考虑连续1的操作?因为选取连续1的操作本质上也是操作二,也就是说,这里的货舱选址问题已经包含了这种情况。

 代码如下:

class Solution {//当出现连续的三个1时,收取3个1的最少操作是2次,操作二两次//当出现连续的两个1时,收取2个1的最少操作是1次,操作二一次public long minimumMoves(int[] nums, int k, int maxChanges) {List<Integer> list = new ArrayList<>();//统计1的下标int c = 0;//统计连续出现的1的最大次数(0,1,2,3),再大就不赚了for(int i=0; i<nums.length; i++){if(nums[i] == 1){list.add(i);c = Math.max(c, 1);if(i>0 && nums[i-1]==nums[i]){c = Math.max(c, 2);if(i>1 && nums[i-2]==nums[i-1])c = Math.max(c, 3);}}}c = Math.min(c,k);if(c + maxChanges >= k)return 2*(k-c)+Math.max(c-1,0);int n = list.size();long[] pre = new long[n+1];long ans = Long.MAX_VALUE;for(int i=0; i<n; i++)pre[i+1] = pre[i] + list.get(i);int size = k - maxChanges;for(int l=0,r=size-1; r<n; l++,r++){int i = (l+r)/2;long s1 = (i-l)*list.get(i)-(pre[i]-pre[l]);long s2 = (pre[r+1]-pre[i])-(r+1-i)*list.get(i);ans = Math.min(ans, s1+s2);}return ans + 2*maxChanges;}
}

 

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

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

相关文章

3月23日,每日信息差

&#x1f396; 素材来源官方媒体/网络新闻 &#x1f384; 首个国产单池万卡液冷算力集群投入运营&#xff0c;满足万亿级大模型训练需求 &#x1f30d; 快手电商正式启动兴农计划 &#x1f30b; 360AI浏览器APP即将上线&#xff0c;支持500万字长文本处理 &#x1f381; 安卓 1…

如何在没有备份的情况下恢复 Android 上已删除的照片?

丢失 Android 设备上的珍贵照片可能是一场噩梦&#xff0c;尤其是在没有备份的情况下。无论是意外删除图像还是由于Android 崩溃而丢失图像&#xff0c;一想到它们可能会永远消失就令人沮丧。幸运的是&#xff0c;有多种方法可以在 Android 上恢复已删除的照片。 如何在没有备份…

一文打尽分布式系统中的事务处理!

之前分享了分布式事务的实现方案&#xff0c;今天我们来对比总结一下&#xff1a; 如何使用最大努力通知实现分布式事务&#xff1f;与本地消息表区别&#xff1f; 如何通过本地消息表实现分布式事务 用二阶段三阶段提交实现分布式事务 如何用TCC实现分布式事务&#xff1f…

上海晋名室外危化品暂存柜助力医药制造行业安全

近日上海晋名又有两台室外危化品暂存柜项目通过验收&#xff0c;此次项目主要用于医药制造行业次氯酸钠、乙醇消毒剂、甲醛等化学品的室外暂存安全。 用户单位创立于2003年&#xff0c;是一家以从事医药制造业为主的企业。用户在日常工作运营中涉及到次氯酸钠、乙醇消毒剂、甲…

面试算法-76-最接近的三数之和

题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1&#xff1a; 输入&#xff1a;nums [-1,2,1,-4], target 1 输出&#…

MT2191 整数大小比较(高精度)

给出两个正整数&#xff0c;判断他们的大小。 输入格式&#xff1a; 两个正整数。 输出格式&#xff1a; 若前者大&#xff0c;输出>&#xff1b; 若后者大&#xff0c;输出<&#xff1b; 若一样大&#xff0c;输出。 输入&#xff1a; 1412894619244619891 23762842…

蓝桥杯2021年第十三届省赛真题-纪念日

一、题目 纪念日 2020 年 7 月 1 日是中国共产党成立 99 周年纪念日。中国共产党成立于 1921 年 7 月 23 日。请问从 1921 年 7 月 23 日中午 12 时到 2020 年 7 月 1 日中午 12 时一共包 含多少分钟&#xff1f;填空题 二、分析 法一&#xff1a; 借助计算机算出有多少天&am…

Matlab|基于条件风险价值CVaR的微网动态定价与调度策略

目录 1 主要内容 模型示意图 电能交易流程 模型亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序复现文章《A cooperative Stackelberg game based energy management considering price discrimination and risk assessment》&#xff0c;建立基于主从博弈的考虑…

继承和深拷贝封装

继承和深拷贝封装 今日目标&#xff1a; 1.es5寄生组合式继承 2.es6类的继承 3.深拷贝函数封装 00-回顾 # 不同数据类型赋值时的区别&#xff1a; 基本数据类型&#xff0c;赋的就是值&#xff0c;相互之间不再有任何影响 引用数据类型&#xff0c;赋的是地址&#xff0c…

LeetCode 每日一题 2024/3/18-2024/3/24

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 3/18 303. 区域和检索 - 数组不可变3/19 1793. 好子数组的最大分数3/20 1969. 数组元素的最小非零乘积3/21 2671. 频率跟踪器3/22 2617. 网格图中最少访问的格子数3/23 254…

OpenJudge - 02:找第一个只出现一次的字符

总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个只包含小写字母的字符串&#xff0c;请你找到第一个仅出现一次的字符。如果没有&#xff0c;输出no。 输入 一个字符串&#xff0c;长度小于100000。 输出 输出第一个仅出现一次的字符&#xff0c;若没有则输出no。 样例输…

LeetCode-热题100:22. 括号生成

题目描述 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a; n 3 输出&#xff1a; [“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2&#xff1a;…

python内置函数 S

python内置函数 S Python 解释器内置了很多函数和类型&#xff0c;任何时候都能使用。 S 名称描述set创建一个集合。setattr设置对象的属性值。slice创建切片对象。sorted对可迭代对象&#xff08;如列表、元组等&#xff09;进行排序&#xff0c;并返回一个新的已排序列表。…

面试算法-78-两两交换链表中的节点

题目 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff…

Filter介绍使用案例

文章目录 一、Filter概念二、Filter快速入门定义类&#xff0c;实现Filter接口&#xff0c;并重写其所有方法 三、Filter执行流程四、Filter使用细节1、Filter拦截路径配置2、过滤器链 五、案例 一、Filter概念 二、Filter快速入门 定义类&#xff0c;实现Filter接口&#xff0…

paddlepaddle框架构建数据集进行分类问题的时候,会发现数据集在构建的过程中不会构建标签(花分类)

问题描述 在做一个paddlepaddle项目的时候&#xff0c;需要使用神经网络对他进行分类&#xff0c;数据集的结构如下图&#xff0c;这时候我们可以使用常用dataset方法对数据集进行构建。 这时候我们就会发现一个问题&#xff0c;就是这个矿建不是构建标签&#xff0c;也就是说…

数据格式化方法

首先你需要一个可以展示代码的组件&#xff1b; 我使用的是tech-ui(内部组件库)&#xff1b; 你如果没有类似的组件&#xff0c;可以参考以下链接替代&#xff1a; react-monaco-editor -- 代码编辑器(适用Umi)_umi monaco editor-CSDN博客 Codemirror -- 代码编辑器(react…

linux修改ftp上传路径

命令行三行即可&#xff0c;假如我想把上传的视频配置到nginx的文件目录下&#xff0c; #修改指定用户的指定文件目录 usermod -d /home/nginx/www/images ftpuser # #给权限 chown -R ftpuser:ftpuser /home/nginx/www/images #重启 systemctl restart vsftpd.service顺便…

洛谷B3626 跳跃机器人

#先看题目 题目描述 地上有一排格子&#xff0c;共 n 个位置。机器猫站在第一个格子上&#xff0c;需要取第n 个格子里的东西。 机器猫当然不愿意自己跑过去&#xff0c;所以机器猫从口袋里掏出了一个机器人&#xff01;这个机器人的行动遵循下面的规则&#xff1a; 初始时…

【项目设计】仿 muduo 库实现 OneThreadOneEventLoop 式并发服务器

文章目录 一、项目介绍1. 项目简介2. 开发环境3. 核心技术4. 开发阶段 二、前置知识了解1. reactor2. timerfd3. timerwheel4. eventfd5. regex6. any 三、框架设计1. 项目模块划分1.1 SERVER 模块1.2 协议模块 2. 项目模块关系图2.1 Connection 模块关系图2.2 Acceptor 模块关…