Leetcode 第396场周赛 问题和解法

问题

有效单词

有效单词需要满足以下几个条件:

至少包含3个字符。
由数字0-9和英文大小写字母组成。(不必包含所有这类字符。)
至少包含一个元音字母。
至少包含一个辅音字母。
给你一个字符串word。如果word是一个有效单词,则返回true,否则返回false。

注意:

‘a’、‘e’、‘i’、‘o’、'u’及其大写形式都属于元音字母。
英文中的辅音字母是指那些除元音字母之外的字母。

示例 1:

输入:word = “234Adas”

输出:true

解释:

这个单词满足所有条件。

解题思路

用两个变量 f0和 f1记录字符串中是否有辅音或元音,必须都为 true才返回 true

如果字符串长度不足 333 或者包含除了数字或字母以外的字符,返回 false。

class Solution {public boolean isValid(String word) {if (word.length() < 3) {return false;}boolean[] f = new boolean[2];Arrays.fill(f, false);for (char c : word.toCharArray()) {if (Character.isAlphabetic(c)) {c = Character.toLowerCase(c);f[c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ? 1 : 0] = true;} else if (!Character.isDigit(c)) {return false;}}return f[0] && f[1];}
}

K 周期字符串需要的最少操作次数

给你一个长度为n的字符串word和一个整数k,其中k是n的因数。

在一次操作中,你可以选择任意两个下标i和j,其中0<=i,j<n,且这两个下标都可以被k整除,然后用从j开始的长度为k的子串替换从i开始的长度为k的子串。也就是说,将子串word[i…i+k-1]替换为子串word[j…j+k-1]。

返回使word成为K周期字符串所需的最少操作次数。

如果存在某个长度为k的字符串s,使得word可以表示为任意次数连接s,则称字符串word是K周期字符串。例如,如果word==“ababab”,那么word就是s="ab"时的2周期字符串。

示例1:

输入:word=“leetcodeleet”,k=4

输出:1

解释:可以选择i=4和j=0获得一个4周期字符串。这次操作后,word变为"leetleetleet"。

解题思路

1、分段统计。使用哈希表记录各段出现次数,并记录相同段的最大次数。
2、使用贪心策略。求最少操作次数,以相同段最多的作为替换基准

class Solution {public int minimumOperationsToMakeKPeriodic(String word, int k) {int len = word.length();// 1、分段统计。使用哈希表记录各段出现次数,并记录相同段的最大次数HashMap<String, Integer> segmentCntMap = new HashMap<>();int maxSegmentCnt = 0;for (int i = 0; i < len; ) {StringBuilder sb = new StringBuilder();for (int j = 0; j < k; i++, j++) {sb.append(word.charAt(i));}String segment = sb.toString();int cnt = segmentCntMap.getOrDefault(segment, 0) + 1;segmentCntMap.put(segment, cnt);maxSegmentCnt = Math.max(cnt, maxSegmentCnt);}// 2、贪心策略。求最少操作次数,以相同段最多的作为替换基准int totalSegment = len / k;return totalSegment - maxSegmentCnt;}
}

同位字符串连接的最小长度

给你一个字符串s,它由某个字符串t和若干t的同位字符串连接而成。

请你返回字符串t的最小可能长度。

同位字符串指的是重新排列一个单词得到的另外一个字符串,原来字符串中的每个字符在新字符串中都恰好只使用一次。

示例1:

输入:s=“abba”

输出:2

解释:

一个可能的字符串t为"ba"。

解题思路

1.len的因子作为 一段段字符串的截取长度。
2.都是小写字母,长度为26的数组判断是否相同就行。

class Solution {public static int minAnagramLength(String s) {char[] ch = s.toCharArray();int len = s.length();for (int i = 1; i <= len; i++) {if (len % i != 0) continue;if (minCheck(ch, i)) return i;}return len;}//不是滑窗 是一个个相同长度的字符串 截取。public static boolean minCheck(char[] ch, int m) {int len = ch.length;if (len % m != 0) return false;//比较的母体。int[] arr = new int[26];for (int i = 0; i < m; i++) {arr[ch[i] - 'a']++;}int[] nowArr = new int[26];//要跟母体比较的字符串从下标m开始。为了不错过最后一段,i能取到lenfor (int i = m; i <= len; i++) {if (i != m && i % m == 0) {//当下标不是m 且 是m的倍数时。// 那就是一段长度为m的字符串了,就可以跟母体比较了if (!Arrays.equals(nowArr, arr)) return false;nowArr = new int[26]; //比较完 清空长度为26的数组}if (i == len) break; //到底了 就要跳出了,不然要越界。nowArr[ch[i] - 'a']++; //计数}return true;}
}

使数组中所有元素相等的最小开销

给你一个整数数组nums和两个整数cost1和cost2。你可以执行以下任一操作任意次:

从nums中选择下标i并且将nums[i]增加1,开销为cost1。
选择nums中两个不同下标i和j,并且将nums[i]和nums[j]都增加1,开销为cost2。
你的目标是使数组中所有元素都相等,请你返回需要的最小开销之和。

由于答案可能会很大,请你将它对109+7取余后返回。

示例1:

输入:nums=[4,1],cost1=5,cost2=2

输出:15

解释:

执行以下操作可以使数组中所有元素相等:

将nums[1]增加1,开销为5,nums变为[4,2]。
将nums[1]增加1,开销为5,nums变为[4,3]。
将nums[1]增加1,开销为5,nums变为[4,4]。
总开销为15。

解题思路

贪心解题

class Solution {int r = 1000000007;public int minCostToEqualizeArray(int[] nums, int cost1, int cost2) {int n = nums.length;long ans = 0;long sum = 0,res=0;// System.out.println(maxn);Arrays.sort(nums);int maxn = nums[n - 1];for(int i=0;i<n;i++){nums[i]=maxn-nums[i];}Arrays.sort(nums);maxn=nums[n-1];System.out.println(sum+"a"+maxn);if (n == 2) {long a=nums[1],b=nums[0];return (int)(( a-b ) * cost1%r);}for (int num : nums)sum +=  num;if (cost1 * 2 <= cost2) {return (int) (sum*cost1%r);}if(maxn*2>sum){//res=sum-2*(sum-maxn);ans=(ans+(sum-maxn)*cost2)%r;res=2*maxn-sum;}else{ans=(ans+sum/2*cost2)%r;if(sum%2==1)res=1;}System.out.println(ans+" "+res);//如果存在多个n-2-2k正好构成resif(n%2==0&&res%2==1){ans=(ans+cost1)%r;res--;if(res==0)return (int) ans % r;}// long a1=cost1*res;// long a2=cost2*// ans+=Math.min();for(int k=0;k*2+2<n&&res>0;k++){long x=n-2-2*k;long u=res/x;ans=(ans+Math.min(u*(x+1+k)*cost2,x*u*cost1))%r;res=res-x*u;}return (int) ans % r;}
}

来源

LeetCode周赛

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

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

相关文章

Spring扩展点(三)Spring常用内置工具类

Spring常用内置工具类 Base64UtilsFileCopyUtilsFileSystemUtilsReflectionUtilsResourceUtilsStringUtilsAopUtilsMethodInvokingBean(简洁反射调用&#xff0c;指定类的指定方法&#xff0c;将其声明为Bean即可在 afterPropertiesSet 阶段触发反射方法调用)ReflectionUtils&a…

GateWay检查接口耗时

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId> </dependency>创建一个LogTimeGateWayFilterFactory类&#xff0c;可以不是这个名字但是后面必须是x…

【高校科研前沿】中国科学院地理资源所钟帅副研究员研究组博士生朱屹东为一作在Top期刊发文:从潜力到利用:探索西藏风能资源开发的技术路径优化布局

01 文章简介 论文名称&#xff1a;From potential to utilization: Exploring the optimal layout with the technical path of wind resource development in Tibet&#xff08;从潜力到利用:探索西藏风能资源开发的技术路径优化布局&#xff09; 文章发表期刊&#xff1a;《…

【Pytorch】2.TensorBoard的运用

什么是TensorBoard 是一个可视化和理解深度爵溪模型的工具。它可以通过显示模型结构、训练过程中的指标和图形化展示训练的效果来帮助用户更好地理解和调试他们的模型 TensorBoard的使用 安装tensorboard环境 在终端使用 conda install tensorboard通过anaconda安装 导入类Sum…

车道线检测交通信号识别车辆实时检测

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言车道线检测机器学习前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对车道线检测&交通信号识别&…

蛋白质/聚合物防污的机器学习(材料基因组计划)

前言&#xff1a;对于采用机器学习去研究聚合物的防污性能&#xff0c;以及或者其他性质。目前根据我的了解我认为最困难的点有三条&#xff1a; 其一&#xff1a;数据&#xff0c;对于将要训练的数据必须要有三点要求&#xff0c;1.数据要多&#xff0c;也就是大数据&#xff…

Retrofit使用举例, Android Gradle 知识,RxJava和接口回调,Activity与Fragmen关系

目录 Retrofit使用举例 Android Gradle 知识 1. Gradle Wrapper​编辑 2. 构建文件 3. 依赖管理

电子取证平航杯的复现

闻早起部分&#xff1a; 一、闻早起的windows10电脑 &#xff08;1&#xff09;.“闻早起”所使用的笔记本电脑使用何种加密程式&#xff1f; 1.在EFI文件中找到加密程式 &#xff08;2&#xff09; 教徒“闻早起”所使用的笔记本电脑中安装了一款还原软件&#xff0c;其版本…

寻找最佳App分发平台:小猪APP分发脱颖而出

在当今移动应用市场日益饱和的环境下&#xff0c;选择一个合适的App分发平台对于开发者来说至关重要。这不仅关系到应用能否快速触达目标用户&#xff0c;还直接影响到品牌的塑造与市场份额的争夺。本文将深入探讨几大关键因素&#xff0c;帮助开发者判断哪个App分发平台最适合…

SAP系统简介,接口的调用方式,以及各个方式的比较

SAP系统是一套企业资源规划&#xff08;ERP&#xff09;软件&#xff0c;由德国SAP公司开发。SAP的全名是“System Applications and Products in Data Processing”&#xff08;数据处理中的系统、应用与产品&#xff09;。SAP系统旨在帮助企业管理和整合公司的关键业务流程。…

Whisper、Voice Engine推出后,训练语音大模型的高质量数据去哪里找?

近期&#xff0c;OpenAI 在语音领域又带给我们惊喜&#xff0c;通过文本输入以及一段 15 秒的音频示例&#xff0c;可以生成既自然又与原声极为接近的语音。值得注意的是&#xff0c;即使是小模型&#xff0c;只需一个 15 秒的样本&#xff0c;也能创造出富有情感且逼真的声音。…

【driver4】锁,错误码,休眠唤醒,中断,虚拟内存,tasklet

文章目录 1.互斥锁和自旋锁选择&#xff1a;自旋锁&#xff08;开销少&#xff09;的自旋时间和被锁住的代码执行时间成正比关系2.linux错误码&#xff1a;64位系统内核空间最后一页地址为0xfffffffffffff000~0xffffffffffffffff&#xff0c;这段地址是被保留的&#xff0c;如果…

全球260多个国家的年通货膨胀率数据集(1960-2021年)

01、数据简介 全球年通货膨胀率是指全球范围内&#xff0c;在一年时间内&#xff0c;物价普遍上涨的比率。这种上涨可能是由于货币过度供应、需求过热、成本上升等原因导致的。通货膨胀率是衡量一个国家或地区经济状况和物价水平的重要指标&#xff0c;通常以消费者价格指数&a…

leetcode 1652.拆炸弹

这道题没有什么明确的做法&#xff0c;我们其实可以根据数组的思想来做。 一般来说是一个循环数组的话&#xff0c;我们可以用while来处理。 如果循环次数很少&#xff0c;我们可以用一种思想&#xff0c;那就是把原先的数组再复制一份放在后面&#xff0c;这样就相当于是循环…

深度学习之DCGAN

目录 须知 转置卷积 DCGAN 什么是DCGAN 生成器代码 判别器代码 补充知识 LeakyReLU&#xff08;x&#xff09; torch.nn.Dropout torch.nn.Dropout2d DCGAN完整代码 运行结果 图形显示 须知 在讲解DCGAN之前我们首先要了解转置卷积和GAN 关于GAN在这片博客中已经很…

数据结构——链表专题2

文章目录 一、返回倒数第k 个节点二、链表的回文结构三、相交链表 一、返回倒数第k 个节点 原题链接&#xff1a;返回倒数第k 个节点 利用快慢指针的方法&#xff1a;先让fast走k步&#xff0c;然后fast和slow一起走&#xff0c;直到fast为空&#xff0c;最后slow指向的结点就…

BGP路由控制实验

1、按照需求配置IP地址&#xff0c;R1和R4配置环回口模拟业务网段&#xff0c;R2、R3、R4配置Loopback0口地址作为OSPF的Router-id和IBGP邻居地址。 2、AS 200 内部配置OSPF&#xff0c;仅用于实现BGP的TCP可达&#xff0c;不允许宣告业务网段。 3、配置BGP&#xff0c;R1和R…

【C++之AVL树旋转操作的详细图解】

C++学习笔记---022 C++之AVL树旋转操作的详细图解1、AVL树的简单介绍1.1、基本概念1.2、平衡因子1.3、AVL树的特性2、C++中pair的介绍2.1、定义和初始化2.2、访问元素2.3、作为容器的元素2.4、作为函数的返回值3、AVL树节点的定义4、AVL的插入规则探究5、AVL树的旋转操作5.1、R…

语音识别--单声道转换与降采样

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

数据结构学习/复习8--树与二叉树的概念与基本性质练习

一、树 1.概念 2.树的表示 二、二叉树 1.二叉树的概念 2.与性质相关的题