LeetCode笔记:Biweekly Contest 88
- LeetCode笔记:Biweekly Contest 88
- 1. 题目一
- 1. 解题思路
- 2. 代码实现
- 2. 题目二
- 1. 解题思路
- 2. 代码实现
- 3. 题目三
- 1. 解题思路
- 2. 代码实现
- 4. 题目四
- 1. 解题思路
- 2. 代码实现
- 1. 题目一
- 比赛链接:https://leetcode.com/contest/biweekly-contest-88/
1. 题目一
给出题目一的试题链接如下:
- 2423. Remove Letter To Equalize Frequency
1. 解题思路
这一题思路上来说并不复杂,就是对每一个出现的字符的个数进行统计,然后看一下是否可以删除其中某一个字符中的一个元素使得所有出现的字符频次相同。
但是需要注意的是,这里有几个需要注意的地方:
- 如果仅出现过一个字符,那么删除一个其中一个也不会产生矛盾,所以也是可接受的;
- 如果某一个字符仅出现过一次,那么删除这个字符之后只要其他字符频次全部相同,也不会出现矛盾;
因此,我们只需要注意一下这几个边界条件即可。
2. 代码实现
给出python代码实现如下:
class Solution:def equalFrequency(self, word: str) -> bool:cnt = list(Counter(word).values())def is_valid(arr, tgt):cnt = 0for x in arr:if tgt != 1 and (x == tgt+1 or x == 1):cnt += 1elif tgt == 1 and x == tgt + 1:cnt += 1elif x != tgt:return Falsereturn (tgt != 1 and cnt == 1) or (tgt == 1 and cnt <= 1)return len(cnt) == 1 or any(is_valid(cnt, x) for x in cnt)
提交代码评测得到:耗时28ms,占用内存13.9MB。
2. 题目二
给出题目二的试题链接如下:
- 2424. Longest Uploaded Prefix
1. 解题思路
这一题我的思路是使用DSU,当有一个视频被加入的时候,就将其与其他加入的视频聚合起来,然后看看视频1是否已经被加入,以及视频1如果被加入了的话,那么视频1所在的集合中最大的视频编号是多少。
而关于DSU的实现,网上已经有了不少博客对其进行介绍,我自己也写过一个(经典算法:并查集(DSU)结构简介),所以这里就不多做展开了。
2. 代码实现
给出python代码实现如下:
class DSU:def __init__(self, N):self.root = [i for i in range(N)]def find(self, k):if self.root[k] != k:self.root[k] = self.find(self.root[k])return self.root[k]def union(self, a, b):x = self.find(a)y = self.find(b)if x != y:self.root[x] = yreturnclass LUPrefix:def __init__(self, n: int):self.n = nself.status = [0 for _ in range(n)]self.dsu = DSU(n)def upload(self, video: int) -> None:idx = video-1self.status[idx] = 1if idx - 1 >= 0 and self.status[idx-1] == 1:self.dsu.union(idx-1, idx)if idx + 1 < self.n and self.status[idx+1] == 1:self.dsu.union(idx, idx+1)returndef longest(self) -> int:if self.status[0] == 0:return 0return self.dsu.find(0) + 1
提交代码评测得到:耗时1880ms,占用内存72.5MB。
3. 题目三
给出题目三的试题链接如下:
- 2425. Bitwise XOR of All Pairings
1. 解题思路
这一题要算所有pair的按位异或之后的值的按位异或的结果,其实就是考察这所有的pair求出来的结果当中每一位上1的个数是奇数还是偶数。
然后,要求解这个问题,我们只需要算出所有pair对求出的按位异或结果中每一位上的1的个数即可,而这个结果我们只需要分别考察num1和num2当中对应位上1和0出现的次数,然后相乘即可。
由此,我们即可对上述问题进行解答。
2. 代码实现
给出python代码实现如下:
class Solution:def xorAllNums(self, nums1: List[int], nums2: List[int]) -> int:n1, n2 = len(nums1), len(nums2)digits1, digits2 = [0 for _ in range(32)], [0 for _ in range(32)]for x in nums1:x = bin(x)[2:].rjust(32, "0")for i in range(32):if x[i] == "1":digits1[i] += 1for x in nums2:x = bin(x)[2:].rjust(32, "0")for i in range(32):if x[i] == "1":digits2[i] += 1res = 0for i in range(32):d1 = digits1[i] * (n2 - digits2[i])d2 = (n1-digits1[i]) * digits2[i]d = (d1 + d2) % 2res = res * 2 + dreturn res
提交代码评测得到:耗时2114ms,占用内存32.9MB。
4. 题目四
给出题目四的试题链接如下:
- 2426. Number of Pairs Satisfying Inequality
1. 解题思路
这一题其实还挺简单的,只要将原不等式:
x i − x j ≤ y i − y j + d x_i - x_j \leq y_i - y_j + d xi−xj≤yi−yj+d
变换为:
x i − y i ≤ x j − y j + d x_i - y_i \leq x_j - y_j + d xi−yi≤xj−yj+d
因此,我们只需要构造一个新的数组 z i = x i − y i z_i = x_i - y_i zi=xi−yi,然后逐一考察对于每一个 z i z_i zi,其前方有多少元素不大于 z i + d z_i+d zi+d即可。
我们只需要维护一个有序数组,然后使用二分查找即可快速得到答案。
2. 代码实现
给出python代码实现如下:
class Solution:def numberOfPairs(self, nums1: List[int], nums2: List[int], diff: int) -> int:delta = [x-y for x, y in zip(nums1, nums2)]elems = []res = 0for x in delta:res += bisect.bisect_right(elems, x + diff)bisect.insort(elems, x)return res
提交代码评测得到:耗时1610ms,占用内存32.5MB。
LeetCode笔记:Biweekly Contest 88相关推荐
- 【LeetCode】Biweekly Contest 10 总结
一.概述 做的很差劲,至少可以拿出半小时看第四题的,结果只ac了第一题和第三题.所以对自己很生气,要总结一下经验教训. 二.分析 1.第一题 输入三个有序数组,找相同元素. 我是个傻逼,为什么这么说呢 ...
- LeetCode笔记:Biweekly Contest 56(补发)
LeetCode笔记:Biweekly Contest 56 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 ...
- LeetCode笔记:Biweekly Contest 38 比赛记录
LeetCode笔记:Biweekly Contest 38 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 ...
- LeetCode笔记:Biweekly Contest 83
LeetCode笔记:Biweekly Contest 83 0. 小结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. ...
- LeetCode笔记:Biweekly Contest 55(补发)
LeetCode笔记:Biweekly Contest 55 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 ...
- LeetCode笔记:Biweekly Contest 68
LeetCode笔记:Biweekly Contest 68 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 ...
- LeetCode笔记:Biweekly Contest 65
LeetCode笔记:Biweekly Contest 65 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 ...
- LeetCode笔记:Biweekly Contest 33 比赛记录
LeetCode笔记:Biweekly Contest 33 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 ...
- LeetCode笔记:Biweekly Contest 94
LeetCode笔记:Biweekly Contest 94 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 ...
最新文章
- 怎么又有了50个 Gmail 邀请
- python类高级用法_十.python面向对象高级用法
- FIND_IN_SET 精确查找
- C#关于文件夹遍历以及文件拷贝
- 解决scrollViewDidScroll do not work的方法
- 【线段树】蝴蝶与花(P6859)
- 剑指 Offer 51. 数组中的逆序对(归并排序做法)
- Linux 软件包管理器的目的是什么,Linux软件包的管理--RPM包管理器
- 打开特定的网站特别慢_网站建设的注意事项
- 阶段3 3.SpringMVC·_07.SSM整合案例_07.ssm整合之编写MyBatis框架测试保存的方法
- 中值滤波器及均值滤波器
- GDB调试 ORBSLAM3
- 计算机流体力学:CFD
- hexo+next主题优化之加入网易云音乐、网易云跟帖、炫酷动态背景
- JZOJ100047. 【NOIP2017提高A组模拟7.14】基因变异
- 北京龙庆峡自助游及攻略
- 部署IBM区块链平台:开发区块链业务网络到Hyperledger Fabric(多个组织)
- 全面梳理:准确率,精确率,召回率,查准率,查全率,假阳性,真阳性,PRC,ROC,AUC,F1
- EasyCHM编译的文件在点击节点时出现错误:确保Web地址//ieframe.dll/dnserrordiagoff.htm#正确
- Spring面试题(一)