5918. 统计字符串中的元音子字符串 看数据范围,暴力过
class Solution:
def countVowelSubstrings(self, word: str) -> int:
res=0
n=len(word)
for a in range(n):
for b in range(a+5,n+1):
i=word[a:b]
if any(x not in 'aeiou' for x in i):continue
if 'a' in i and 'e' in i and 'i' in i and 'o' in i and 'u' in i:
res+=1
return res
5919. 所有子字符串中的元音 第一次考虑前缀和做,子字符串word[a:b]内的元音字符数为pre[b+1]-pre[a]
class Solution:
def countVowels(self, word: str) -> int:
n=len(word)
res=0
dic=[0]*n
for i in range(n):
if word[i] in ('a','e','i','o','u'):
dic[i]=1pre=[0,*accumulate(dic)]for a in range(n):
for b in range(a,n):
res+=pre[b+1]-pre[a]
return res
果然超时, 找一下规律,可以发现pre[i]的个数为2*i-n
class Solution:
def countVowels(self, word: str) -> int:
n=len(word)
res=0
dic=[0]*n
for i in range(n):
if word[i] in 'aeiou':
dic[i]=1pre=[0,*accumulate(dic)]for i in range(n+1):
res+=(2*i-n)*pre[i]
return res
整理下变成python二行
class Solution:
def countVowels(self, word: str) -> int:
pre=[0,*accumulate([1 if word[i] in 'aeiou' else 0for i in range(len(word))])]
return sum((2*i-len(word))*pre[i] for i in range(len(word)+1))
5921. 最大化一张图中的路径价值 这次的T4比较简单,看下数据范围:
n == values.length
1 <= n <= 1000
10 <= timej, maxTime <= 100
- 每个节点 至多有四条 边
class Solution:
def maximalPathQuality(self, values: List[int], edges: List[List[int]], maxTime: int) -> int:
n=len(values)
dic={i:list() for i in range(n)}
for e in edges:
a,b,c=e
dic[a].append([b,c])
dic[b].append([a,c])def dfs(cur,tc,res,nodes):
if tc>maxTime:
return if cur==0:
vc=0
for i in set(nodes):
vc+=values[i]
res[0]=max(res[0],vc)for x in dic[cur]:
nodes.append(x[0])
dfs(x[0],tc+x[1],res,nodes)
nodes.pop()res=[0]
dfs(0,0,res,[0])return res[0]
5920. 分配给商店的最多商品的最小值 最小化最大值问题,首先可见是贪心,其次可以注意到单调性,而后二分求解
class Solution:
def minimizedMaximum(self, n: int, quantities: List[int]) -> int:
l,r=1,max(quantities)
while l<=r:
mid=l+(r-l>>1)
need=sum(ceil(q/mid) for q in quantities)
if need>n:
l=mid+1
elif need<=n:
r=mid-1
return l
875. 爱吃香蕉的珂珂 周赛P3换皮题,用来巩固下二分板子
class Solution:
def minEatingSpeed(self, piles: List[int], h: int) -> int:
l,r=1,max(piles)
while l<=r:
mid=l+(r-l>>1)
need=sum(ceil(p/mid) for p in piles)
if need>h:
l=mid+1
elif need<=h:
r=mid-1
return l
复盘总结 学习一下六弦爷的最短写法!
P1 统计字符串中的元音子字符串
class Solution:
def countVowelSubstrings(self, word: str) -> int:
return sum(set(word[i: j + 1]) == set('aeiou') for i in range(len(word)) for j in range(i + 1, len(word)))
P2 所有子字符串中的元音
class Solution:
def countVowels(self, word: str) -> int:
return sum((i + 1) * (len(word) - i) for i, c in enumerate(word) if c in 'aeiou')
【数据结构与算法|【算法】力扣第 266场周赛】P3 分配给商店的最多商品的最小值
class Solution:
def minimizedMaximum(self, n: int, Q: List[int]) -> int:
class A:
def __getitem__(self, x):
return sum(q // x + (1 if q % x else 0) for q in Q) <= n
return bisect_left(A(), True, 1, max(Q) + 1)
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)
- 网络|简单聊聊压缩网络