LeetCode笔记:Biweekly Contest 80
Posted Espresso Macchiato
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode笔记:Biweekly Contest 80相关的知识,希望对你有一定的参考价值。
1. 题目一
给出题目一的试题链接如下:
1. 解题思路
这一题思路上非常的直接,按照题目要求翻译一下就行了,倒是问题不大。
2. 代码实现
给出python代码实现如下:
class Solution:
def strongPasswordCheckerII(self, password: str) -> bool:
if len(password) < 8:
return False
if not any(ch in string.ascii_lowercase for ch in password):
return False
if not any(ch in string.ascii_uppercase for ch in password):
return False
if not any(ch in string.digits for ch in password):
return False
if not any(ch in "!@#$%^&*()-+" for ch in password):
return False
n = len(password)
if any(password[i] == password[i+1] for i in range(n-1)):
return False
return True
提交代码评测得到:耗时60ms,占用内存13.9MB。
2. 题目二
给出题目二的试题链接如下:
1. 解题思路
这一题就是针对每一个spell找一下potion里面有多少个大于success / spell
的元素即可。对potions进行排序之后用一个二分查找即可快速地进行实现。
2. 代码实现
给出python代码实现如下:
class Solution:
def successfulPairs(self, spells: List[int], potions: List[int], success: int) -> List[int]:
potions = sorted(potions)
n = len(potions)
res = [n - bisect.bisect_left(potions, success / s) for s in spells]
return res
提交代码评测得到:耗时1640ms,占用内存37.8MB。
3. 题目三
给出题目三的试题链接如下:
1. 解题思路
这一题一开始还想要优化来着,不过想来想去也没想到啥好方法,还引入了不少逻辑漏洞。
最后还是干脆最暴力的直接遍历然后检索了一下,倒是可以搞定,不过耗时有点惨就是了。
2. 代码实现
给出python代码实现如下:
class Solution:
def matchReplacement(self, s: str, sub: str, mappings: List[List[str]]) -> bool:
n, m = len(s), len(sub)
changable = ch for it in mappings for ch in it
convert = defaultdict(set)
for k, v in mappings:
convert[k].add(v)
def is_matched(idx):
return all(s[idx+i] == sub[i] or s[idx+i] in convert[sub[i]] for i in range(m))
return any(is_matched(idx) for idx in range(n-m+1))
提交代码评测得到:耗时5650ms,占用内存14.3MB。
4. 题目四
给出题目四的试题链接如下:
1. 解题思路
这一题其实非常简单,完全谈不上是hard,因为分数的定义是个数乘以总和,两者都是单调递增的,因此,我们只需要考察每一个元素作为右边界时左边界的下界的位置即可。
显然,这个下界的坐标也是一个单调数组,因此,通过滑动窗口即可对其进行实现。
2. 代码实现
给出python代码实现如下:
class Solution:
def countSubarrays(self, nums: List[int], k: int) -> int:
accum = [0] + list(accumulate(nums))
i, j, n = 0, 1, len(nums)
res = 0
while j <= n:
while i < j and (j-i) * (accum[j] - accum[i]) >= k:
i += 1
res += j-i
j += 1
return res
提交代码评测得到:耗时1797ms,占用内存28.8MB。
以上是关于LeetCode笔记:Biweekly Contest 80的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode笔记:Biweekly Contest 79
LeetCode笔记:Biweekly Contest 93
LeetCode笔记:Biweekly Contest 89
LeetCode笔记:Biweekly Contest 69