【双周赛】第74场双周赛
第74场双周赛
- 6020. 将数组划分成相等数对
- 6021. 字符串中最多数目的子字符串
- 6022. 将数组和减半的最少操作次数
- 6023. 用地毯覆盖后的最少白色砖块
6020. 将数组划分成相等数对
第一题很简单,不到一分钟就可以做出来了。思路就是统计每一个数字出现的次数,只有所有数字都出现过偶数次,才满足要求。
class Solution:def divideArray(self, nums: List[int]) -> bool:# 判断数组是否每一个数字都出现过偶数次dic = collections.defaultdict(int)for i, num in enumerate(nums):dic[num] += 1for k, v in dic.items():if v % 2 == 1:return Falsereturn True
6021. 字符串中最多数目的子字符串
这一题没做出来。主要是因为对贪心法做得少。
贪心的思路是:
根据题意,设pattern中第一个字母为x,第二个字母为y,那么肯定是x越靠左越好,y越靠右越好(这一点当时都没想到)。于是可以直接把x放在最左侧或者y放在最右侧,每遇到一个y就统计左边x的个数。
需要注意的是,如果放x,那么相比于放之前,肯定多的子字符串个数是cy(cy为test中y出现的次数)。
如果放y,比之前做的子字符串个数为cx(cx为test中x出现的次数)。这样的话,我们就可以一次遍历解决两种情况了。
那么怎么计算text中本来有多少个pattern呢,其实在遍历的时候就可以直接计算y左边有多少个x,然后直接累加就行了。
class Solution:def maximumSubsequenceCount(self, text: str, pattern: str) -> int:# 如果x==y,此时可以直接遍历text计算有多少个x,那么加上一个,之后用组合公式即可if pattern[0] == pattern[1]:cx = 0for t in text:if t == pattern[0]:cx += 1return cx * (cx + 1) // 2res = 0x, y = pattern[0], pattern[1]cx = cy = 0for i in range(len(text)):if text[i] == x:cx += 1elif text[i] == y:cy += 1res += cx # 当前y左边有多少个x,那么以该y为第二个元素的子字符串就有多少个return res + max(cx, cy)
6022. 将数组和减半的最少操作次数
这次双周赛,第三题并不难。其实也算贪心的方法,每次把最大的那个数减半,第二次再把当前最大的数减半,以此类推直到总和小于原来的一半,但是这样每次都要排序,很耗时。此时就可以想到有一种数据结构可以在拿出或者放入元素的时候自动维护有序,那就是堆。
不过python中是最小堆,所以我们需要把每个数字都转换成负数,最后求和也不是判断总和小于之前的一半,而是当总和小于之前一半的时候一致循环。
另外一点要注意的是,不需要每次都重新计算总和,这样的话会超时。我们每次都知道前一次的总和,而这次减小了多少我们也知道,所以可以直接计算,不需要对整个数组重新求和。
class Solution:def halveArray(self, nums: List[int]) -> int:# 每次从最大的数字开始减小,但是减小后还需要重新对数组排序,这很耗时# 可以维护一个最大堆q = []for num in nums:heapq.heappush(q, -num)total = sum(q)res = 0new_sum = totalwhile new_sum < (total / 2):res += 1num = heapq.heappop(q)num = num / 2new_sum -= num # 新的数组和减少了numheapq.heappush(q, num)return res
6023. 用地毯覆盖后的最少白色砖块
pass
【双周赛】第74场双周赛相关推荐
- LeetCode 第 30 场双周赛(477/2545,前18.7%,第2次全部通过)
文章目录 1. 比赛结果 2. 题目 1. LeetCode 5177. 转变日期格式 easy 2. LeetCode 5445. 子数组和排序后的区间和 medium 3. LeetCode 54 ...
- LeetCode第45场双周赛-解题报告
LeetCode第45场双周赛-解题报告 A. 唯一元素的和 原题链接 https://leetcode-cn.com/problems/sum-of-unique-elements/ 解题思路 因为 ...
- 20220219:力扣第72场双周赛题解
力扣第72场双周赛 题目 思路与算法 代码实现 写在最后 题目 统计数组中相等且可以被整除的数对 找到和为给定整数的三个连续整数 拆分成最多数目的偶整数之和 统计数组中好三元组数目 思路与算法 前三题 ...
- 20210530:力扣第53场双周赛题解
力扣第53场双周赛题解 题目 思路与算法 代码实现 写在最后 题目 长度为三且各字符不同的子字符串 数组中最大数对和的最小值 矩阵中最大的三个菱形和 思路与算法 长度为三且各字符不同的子字符串:遍历查 ...
- 20201023:力扣第37场双周赛(上)
力扣第37场双周赛(上) 题目 思路与算法 代码实现 写在最后 题目 删除某些元素后的数组均值 网络信号最好的坐标 思路与算法 第二题直接暴力就可以了,计算每个点的所有偏移量存入list,即以(0,0 ...
- 以赛促练-力扣第85场双周赛以及第307场周赛
文章目录 第85场双周赛 T3.字母移位II T4.删除操作后的最大子段和 第307场周赛 T2.最大回文数字 T3.感染二叉树需要的总时间 T4.找出数组的第K大和 第85场双周赛 T1直接暴力枚举 ...
- Leetcode 第 69 场双周赛记录
Leetcode 第 69 场双周赛记录 1.第一题 5960. 将标题首字母大写 难度:easy 给你一个字符串 title ,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母.请你按以 ...
- 力扣 第 87 场双周赛 ---心态爆炸场
第 87 场双周赛 T1 - 模拟 class Solution {public:int q[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, ...
- [LeetCode周赛复盘] 第 89 场双周赛20221015
[LeetCode周赛复盘] 第 89 场双周赛20221015 一.本周周赛总结 二. [Easy] 6208. 有效时间的数目 1. 题目描述 2. 思路分析 3. 代码实现 三.[Medium] ...
最新文章
- 修改VS2017新建类模板文件添加注释
- java selector 源码_基于selector的源码分析和理解、思想和应用实践
- Hive安装及常用交互命令
- [LeetCode] Multiply Strings 解题报告
- javaone_JavaOne 2015:高级模块化开发
- Visio2007 与Microsoft Studio 2008不兼容
- PyTorch 1.0 中文文档:Torch 脚本
- VS2015解决非Unicode编码包含中文字段无法编译的问题
- Redis教程:数据对象分析(二)
- UCOSII学习笔记[开篇]
- PHP与MySQL动态网站开发:第4版
- spirng 事物只支持 dml语句 update,insert delete
- “向死而生”的微信视频号,逆风翻盘的2020
- 全球及中国钢铁贸易行业销售模式与供给规模预测报告2021版
- word标题多级编号里的坑
- 城市智慧水务供水测试床在工业互联网上发布
- 违反GPL协议赔偿50万,国内首例!
- 行测判断推理部分之图形推理(位置)
- SDN入门第五篇——交换机与控制器之间的交互流程
- 【UVA11478】Halum (最短路解差分约束)
热门文章
- 游戏平台商店化的功能特点
- DOE中的“已编码系数”和“以未编码单位表示的回归方程”
- 11.Ingress资源
- 华为NCE网管创建EVPL(共享VCTrunk) 路径法三步走
- render()函数进行服务器端渲染(详细)
- GL 设置LE报错 - 缺少留存收益
- 淘宝爆款返场什么意思?淘宝爆款返场怎么报名?
- 词云中去重复的词_手把手教你怎么挖掘蓝海词,打造淘宝爆款标题
- delmia机器人示教01
- 各类数据库驱动包列表下载