Leetcode - 周赛396

目录

一,3136. 有效单词

二,3137. K 周期字符串需要的最少操作次数

三,3138. 同位字符串连接的最小长度

四,3139. 使数组中所有元素相等的最小开销


一,3136. 有效单词

本题就是一道阅读理解题:

  • 字符串长度小于3,返回false
  • 字符串出现除了26个字母和数字以外的字符,返回false
  • 字符串中必须出现至少一个元音字母,一个辅音字母

代码如下: 

class Solution {public boolean isValid(String word) {if(word.length() < 3) return false;String t = "aeiouAEIOU";int a = 0, b = 0, c = 0;for(char ch : word.toCharArray()){if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'){if(t.indexOf(ch)!=-1){a++;}else{b++;}}else if(ch>='0'&&ch<='9'){c++;}else{return false;}}return a>0&&b>0;}
}

二,3137. K 周期字符串需要的最少操作次数

本题求最少操作次数,正难则反,可以转换成最多保留多少个长度为k的字符串,可以使用HashMap来存储长度为k的子字符串出现次数,用 总数 - 最多的出现次数 就是答案。

代码如下:

class Solution {public int minimumOperationsToMakeKPeriodic(String word, int k) {Map<String,Integer> map = new HashMap<>();int mx = 0;for(int i=0; i<=word.length()-k; i+=k){String t = word.substring(i, i+k);map.merge(t, 1, Integer::sum);mx = Math.max(mx, map.get(t));}return word.length()/k - mx;}
}

三,3138. 同位字符串连接的最小长度

本题的题意:能否将字符串均匀分成 x 段,使得每一段字符串出现字符的种类和数目一样,返回最短的子字符串,可以直接暴力

代码如下:

class Solution {public int minAnagramLength(String s) {char[] ch = s.toCharArray();int n = s.length();for(int k=1; k<=n/2; k++){if(n%k != 0) continue;int[] cnt = new int[26];for(int j=0; j<k; j++){cnt[ch[j]-'a']++;}boolean flg = true;//判断后续分成的字段是否符合条件for(int i=k; i<=n-k; i+=k){int[] cnt0 = new int[26];for(int j=i; j<i+k; j++){cnt0[ch[j]-'a']++;}if(!Arrays.equals(cnt, cnt0)){flg = false;break;}}if(!flg) continue;return k;}return n;}
}

四,3139. 使数组中所有元素相等的最小开销

在写题之前,需要先解决一个问题,当数组中所有的元素相等时,这个相等的值(k)是否一定要等于原数组中的最大值?这是不一定的,比如 [1,14,14,15],cost1=2,cost2=1,该样例的中,当它的所有元素等于21时,它的所有开销最小,所以需要从max(nums)开始枚举这个k,不断的求出其中的最小值。

分类讨论:

  • cost1 * 2 <= cost2 ,直接全部使用 cost1 来增加,返回 s * cost1 % MOD
  • 接下来就是如何判断何时使用 cost1,cost2。易知,只有先使用cost2,再使用cost1,才能使得答案越小,这里讲一个结论,令 d = k - mn,s = 整个数组需要增加的1的次数:当 d <= s - d 时,res = s / 2 * cost2 + s % 2 * cost1;当 d > s - d 时,res = (s - d) * cost2 + (2*d - s) * cost1;

结论说明:上述选择同增(cost2)还是单增(cost1)的问题,可以转化成——给你一个字符串(只包含小写字母),让他重新排列,问你能否使得这个字符串相邻的字符不相同?

实在不明白可以去写一下这个题  重排字符串 (nowcoder.com)

class Solution {public int minCostToEqualizeArray(int[] nums, int cost1, int cost2) {int MOD = (int)1e9 + 7;long mx = 0, mn = nums[0], sum = 0;int n = nums.length;for(int x : nums){mx = Math.max(mx, x);mn = Math.min(mn, x);sum += x;}long s = n*mx - sum;if(2*cost1 <= cost2) return (int)(s * cost1 % MOD);long ans = Long.MAX_VALUE;for(long i=mx; i<mx*2+1; i++){long d = i - mn;long res = 0;if(d <= s - d){res = s/2*cost2+s%2*cost1;}else{res = (s - d)*cost2+(d*2-s)*cost1;}s += n;ans = Math.min(ans, res);}return (int)(ans%MOD);}
}

优化:二分

class Solution {long base,n;long mn, mx, c1, c2;public int minCostToEqualizeArray(int[] nums, int cost1, int cost2) {int MOD = (int)1e9 + 7;this.c1 = cost1;this.c2 = cost2;long mx = 0, mn = nums[0];long sum = 0;int n = nums.length;this.n = n;for(int x : nums){mx = Math.max(mx, x);mn = Math.min(mn, x);sum += x;}long base = n*mx - sum;this.base = base;this.mx = mx;this.mn = mn;if(2*cost1 <= cost2) return (int)(base * cost1 % MOD);long ans = Long.MAX_VALUE;if(mx%2==1){    ans = f(mx);mx += 1;base += n;}long l = mx/2, r = mx;//偶数while(l <= r){long k = (l + r)/2;if(f(k*2)<f((k+1)*2)){r = k - 1;}else{l = k + 1;}}long k0 = r + 1;l = mx/2;r = mx;while(l <= r){//奇数long k = (l + r)/2;if(f(k*2+1) < f((k+1)*2+1)){r = k - 1;}else{l = k + 1;}}long k1 = r + 1;ans = Math.min(ans, f(k0*2));ans = Math.min(ans, f(k1*2+1));return (int)(ans%MOD);}private long f(long i){long s = base + (i - mx)*n;long d = i - mn;if(d <= s - d){return s/2*c2 + s%2*c1;}return (s-d)*c2+(d*2-s)*c1;}
}

 

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

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

相关文章

NSSCTF | [SWPUCTF 2021 新生赛]easy_sql

打开题目&#xff0c;提示输入一些东西&#xff0c;很显眼的可以看到网站标题为“参数是wllm” 首先单引号判断闭合方式 ?wllm1 报错了&#xff0c;可以判断为单引号闭合。 然后判断字节数&#xff08;注意‘--’后面的空格&#xff09; ?wllm1 order by 3-- 接着输入4就…

vue多选功能

废话不多说&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; <template><div class"duo-xuan-page"><liv-for"(item, index) in list":key"index"click"toggleSelection(item)":class"{ active: sel…

ue引擎游戏开发笔记(36)——为射击落点添加特效

1.需求分析&#xff1a; 在debug测试中能看到子弹落点后&#xff0c;需要给子弹添加击中特效&#xff0c;更真实也更具反馈感。 2.操作实现&#xff1a; 1.思路&#xff1a;很简单&#xff0c;类似开枪特效一样&#xff0c;只要在头文件声明特效变量&#xff0c;在fire函数中…

Leetcode—232. 用栈实现队列【简单】

2024每日刷题&#xff08;131&#xff09; Leetcode—232. 用栈实现队列 实现代码 class MyQueue { public:MyQueue() {}void push(int x) {st.push(x);}int pop() {if(show.empty()) {if(empty()) {return -1;} else {int ans show.top();show.pop();return ans;}} else {i…

Burp Suite 抓包,浏览器提示有软件正在阻止Firefox安全地连接到此网站

问题现象 有软件正在阻止Firefox安全地连接到此网站 解决办法 没有安装证书&#xff0c;在浏览器里面安装bp的证书就可以了 参考&#xff1a;教程合集 《H01-启动和激活Burp.docx》——第5步

金蝶BI应收分析报表:关于应收,这样分析

这是一张出自奥威-金蝶BI方案的BI应收分析报表&#xff0c;是一张综合运用了筛选、内存计算等智能分析功能以及数据可视化图表打造而成的BI数据可视化分析报表&#xff0c;可以让企业运用决策层快速知道应收账款有多少&#xff1f;账龄如何&#xff1f;周转情况如何&#xff1f…

ARTS Week 27

Algorithm 本周的算法题为 58. 最后一个单词的长度 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1&#xff1a;输入&#xff1a…

JAVA基础面试题(第十一篇)上! JVM

Hello好久不见&#xff01;&#xff0c;最近我们讲更新JVM部分的面试题。 JVM 这块比较难理解&#xff0c;而且也是不擅长的点。所以今天我更新一下JVM希望小伙伴们能在面试中取得好成绩&#xff01; JVM 1. 什么是JVM内存结构&#xff1f; jvm将虚拟机分为5大区域&#xff0…

上市公司-库存周转率、供应链效率明细数据集(2000-2022年)

01、数据介绍 库存周转率是衡量企业库存管理效率的关键指标之一&#xff0c;它反映了企业库存的流转速度。而供应链效率则体现了企业在整个供应链管理中的表现&#xff0c;包括采购、生产、物流等环节的协同和优化。 提高库存周转率和供应链效率是上市公司优化企业运营和管理…

ICode国际青少年编程竞赛- Python-2级训练场-识别循环规律2

ICode国际青少年编程竞赛- Python-2级训练场-识别循环规律2 1、 for i in range(3):Dev.step(3)Dev.turnRight()Dev.step(4)Dev.turnLeft()2、 for i in range(3):Spaceship.step(3)Spaceship.turnRight()Spaceship.step(1)3、 Dev.turnLeft() Dev.step(Dev.x - Item[1].…

编译和链接(超详细)

✅博客主页:爆打维c-CSDN博客​​​​​​ &#x1f43e; &#x1f539;分享c语言知识及代码 一、编译和链接实例 假设我们有一个名为main.c的C语言源文件&#xff0c;它包含了一个简单的Hello World程序。我们可以使用gcc编译器对该源文件进行编译&#xff0c;生成一个可执行…

AI大模型探索之路-训练篇18:大语言模型预训练-微调技术之Prompt Tuning

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

亚马逊是如何铺设多个IP账号实现销量大卖的?

一、针对亚马逊平台机制&#xff0c;如何转变思路&#xff1f; 众所周知&#xff0c;一个亚马逊卖家只能够开一个账号&#xff0c;一家店铺&#xff0c;这是亚马逊平台明确规定的。平台如此严格限定&#xff0c;为的就是保护卖家&#xff0c;防止卖家重复铺货销售相同的产品&a…

【读论文】Gaussian Grouping: Segment and Edit Anything in 3D Scenes

Gaussian Grouping: Segment and Edit Anything in 3D Scenes 文章目录 Gaussian Grouping: Segment and Edit Anything in 3D Scenes1. What2. Why3. How3.1 Anything Mask Input and Consistency3.2 3D Gaussian Rendering and Grouping3.3 Downstream: Local Gaussian Editi…

10000 字详细讲解 Spring 中常用注解及其使用

如下图京东购物页面&#xff0c;当我们选择点击访问某一类商品时&#xff0c;就会向后端发起 HTTP 请求&#xff0c;当后端收到请求时&#xff0c;就会找到对应的代码逻辑对请求进行处理&#xff0c;那么&#xff0c;后端是如何来查找处理请求相对应的代码呢&#xff1f;答案就…

计算机考研|25人太难了,408会炸,还是自命题会炸?

自命题已经不是炸不炸的问题了&#xff0c;是有没有学上的问题。 我记得去年九月一些学校宣布改考408的时候&#xff0c;整个群里都炸了&#xff0c;同学一片哀嚎。要知道九月的时候要重新准备408肯定是不可能了&#xff0c;一来408复习的基础阶段已经过去了&#xff0c;二来英…

人工智能哪些大学比较好

人工智能领域的大学有很多&#xff0c;以下是一些国际上被广泛认可的一流大学&#xff1a; 1. **斯坦福大学&#xff08;Stanford University&#xff09;** - 位于美国加州的斯坦福大学拥有顶尖的人工智能研究中心&#xff0c;并在机器学习、自然语言处理等领域处于领先地位。…

phpstudy(MySQL启动又立马停止)问题的解决办法

方法一&#xff1a;查看本地安装的MySQL有没有启动 1.鼠标右击开始按钮选择计算机管理 2.点击服务和应用程序 3.找到服务双击 4.找到MySQL服务 5.双击查看是否启动&#xff0c;如启动则停止他&#xff0c;然后确定&#xff0c;重新打开phpstudy,启动Mysql. 方法二&#xff…

[鸟哥私房菜]4.首次登录与在线求助

第4章 首次登录与在线求助 4.1.3 X Window 与命令行模式的切换 通常我们称命令行界面为终端界面、Terminal 或 Console。Linux 默认的情况下会提供六个终端&#xff08;Terminal&#xff09;来让用户登录&#xff0c; 切换的方式为使用&#xff1a;[Ctrl] [Alt] [F1]~[F6] …

TypeScript学习日志-第十七天(泛型约束)

泛型约束 当我们使用泛型时非常方便&#xff0c;但是在使用的过程中也会遇到很多问题&#xff0c;如图&#xff1a; 这时候就会提示错误&#xff0c;因为返回的是相加的值&#xff0c;但是不是所有的类型都能相加的&#xff0c;例如来个undefined类型的 就不能进行相加了&…