LeetCode 第396场周赛个人题解

devtools/2024/10/18 14:24:58/


 

目录

100284. 有效单词

原题链接

思路分析

AC代码

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

原题链接

思路分析

AC代码

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

原题链接

思路分析

AC代码

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

原题链接

思路分析

AC代码


100284. 有效单词

原题链接





100284. 有效单词

思路分析

直接模拟即可

时间复杂度O(n)

AC代码

class Solution:def isValid(self, word: str) -> bool:n = len(word)if n < 3:return Falsef1, f2 = False, Falsest1 = ['a', 'e', 'i', 'o', 'u']for x in word:if not (str.isdigit(x) or str.isalpha(x)):return Falseif str.lower(x) in st1:f1 = Trueif str.isalpha(x) and (not str.lower(x) in st1):f2 = Truereturn f1 and f2

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

原题链接

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

思路分析

我们所有整除k下标开始的长度为k的字符串中的最大出现次数ma

那么答案就是n / k - ma

时间复杂度O(n)

AC代码

class Solution:def minimumOperationsToMakeKPeriodic(self, word: str, k: int) -> int:n = len(word)cnt = Counter([word[i:i+k] for i in range(n) if i % k == 0])return n // k - cnt.most_common(1)[0][1]

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

原题链接

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

思路分析

比赛的时候用gcd,三行代码直接过了,赛后发现一堆人说不对,然后发现中文题目翻译错了真无语了,赛后复测的话这次要掉大分了

由于同位字符串长度整除s的长度,我们枚举s长度的因子,然后滑窗判断是否成立,成立就返回

时间复杂度:O(n^(3/2))

AC代码

class Solution:def minAnagramLength(self, s: str) -> int:i = 1n = len(s)while i <= n:if n % i:i += 1continuecnt = Counter(s[:i])f = 1for j in range(i, n, i):if Counter(s[j:j+i]) != cnt:f = 0breakif f:return ii += 1

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

原题链接

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

思路分析

对于n种物品,每种物品有若干个,我们可以一次拿一个物品也可以一次拿两个不同的物品,如果我们两个两个拿,我们最多拿多少次?

建议先看这道题:

贪心,LeetCode 1953. 你可以工作的最大周数

通过上面这道题,我们可以得到结论,对于上面的物品,我们可以得到的最长两两不同的物品序列长度为min(s + ma, s * 2 + 1),其中ma为最大物品数,s为除去最多的那种物品的物品数的和

那么我们每次拿两个不同的物品可以拿的最大次数就是上面的结果除以2向下取余即可

然后看本题

如果n = 1,2我们进行特判

如果cost1 * 2 <= cost2,那么两个两个加没有优势,我们把每个数字加到序列中最大的数的代价就是答案

cost1 * 2 > cost2 时,显然两个两个加比单独加要更优,我们这样考虑

把所有数字加到某个相同的数字ma,等价于在[ma - nums[i]]这样一个新数组中,每次拿两个不同的物品或者每次拿一个物品,把所有物品拿完的最小代价

我们已知两个两个拿比单独拿更优,那么尽可能多的两个两个拿,然后剩下的单独拿就是最优解

我们发现最终结果取决于ma,ma最小是我们构造出的新数组的最大值

我们ma增加1,s会增加n,故:

ma < s - 1时,ma增加会导致两个两个拿和单独拿的次数都增加,不会得到更优解

ma > s + 1时,ma增加,两个两个拿次数增加,单独拿次数可能减小,可能得到更优解

而ma增长速度小于s,所以最多增加ma初始值次,所以我们枚举初始ma到ma * 2过程中的结果即可

时间复杂度O(n + U),U为值域上限

更快的做法是三分,因为我们把上面分析更进一步会发现答案为一个单峰函数,而求解单峰函数的经典做法就是三分,比赛还是求稳直接枚举得了

AC代码

mod = 10**9 + 7
class Solution:def minCostToEqualizeArray(self, nums: List[int], cost1: int, cost2: int) -> int:ma = max(nums)nums = [ma - x for x in nums]if cost2 > cost1 * 2:return sum([x * cost1 for x in nums]) % mods = sum(nums)ma = max(nums)op2 = min(s // 2, s - ma)op1 = s - op2 * 2ret = op1 * cost1 + op2 * cost2n = len(nums)if n == 1:return 0if n == 2:return ret % modt = mafor _ in range(t):ma += 1s += nop2 = min(s // 2, s - ma)op1 = s - op2 * 2ret = min(ret, op1 * cost1 + op2 * cost2)return ret % mod


http://www.ppmy.cn/devtools/34442.html

相关文章

【JavaEE 初阶(二)】线程安全问题

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多线程知识 目录 1.前言2.synchronized2.1例子2.2synchronized修饰代码块2.3 synchronized修饰方法2.4sy…

2万字长文:海豚调度器(DolphinScheduler)面试题深入了解

目录 海豚调度器的主要功能和特点 海豚调度器与Oozie、Azkaban等调度器相比的优势

​可视化大屏C位图:3D模型,可视化大屏的画龙点睛之处

Hello&#xff0c;我是大千UI工场&#xff0c;本期可视化大屏的焦点图&#xff08;C位&#xff09;分享将图表作为焦点图的情形&#xff0c;欢迎友友们关注、评论&#xff0c;如果有订单可私信。 3D模型在可视化大屏中有很大的价值&#xff0c;以下是一些相关的优点&#xff1a…

计算机服务器中了halo勒索病毒怎么处理,halo勒索病毒解密流程步骤

在网络技术飞速发展的时代&#xff0c;越来越多的企业走向了数字化办公模式&#xff0c;利用网络可以开展各项工作业务&#xff0c;网络也为企业的生产运营提供了极大便利&#xff0c;但网络是一把双刃剑&#xff0c;从网络出现就一直存在网络数据安全问题&#xff0c;这也是众…

Rust语言入门:系统编程的未来

Rust 是一种系统编程语言&#xff0c;自 2010 年首次发布以来&#xff0c;它因其独特的内存安全保证和现代语言特性而备受关注。Rust 被设计用来创建高性能且安全的应用程序&#xff0c;特别是在操作系统、文件系统、游戏引擎和网络服务等领域。以下是关于 Rust 语言的基本介绍…

删掉的文件在哪里找到并恢复?3个恢复策略公开!

“我一不小心就删除了一个比较重要的文件&#xff0c;不知道我可以在哪里找到这个删除的文件并将它恢复呢&#xff1f;” 在数字时代&#xff0c;电脑已成为我们生活和工作中不可或缺的工具。然而&#xff0c;随着我们使用电脑进行各种操作&#xff0c;有时不可避免地会出现误删…

【C++】学习笔记——vector_3

文章目录 七、vector3. vector的模拟实现4. vector实现代码整合 未完待续 七、vector 3. vector的模拟实现 上篇文章我们讲解了非常 玄幻 的拷贝构造函数&#xff0c;同样的方法&#xff0c;我们也能用这种方法来实现 赋值重载函数 。 void swap(vector<T>& v) {s…

变老相机app

变老相机app 在手机上使用“变老相机”app&#xff0c;其中的时光穿梭功能可以生成10岁、20岁、50岁、70岁的照片 目的 得到未来自己的照片&#xff0c;能够更有效地督促我们为老年的自己存款。