本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。
3627. 中位数之和的最大值 - 力扣(LeetCode)
解题思路
叽里咕噜,贪心即可
示例代码
python
class Solution:
def maximumMedianSum(self, nums: List[int]) -> int:
return sum(sorted(nums)[len(nums)//3::2])3628. 插入一个字母的最大子序列数 - 力扣(LeetCode)
解题思路
前后缀分解,单独判断插入C时的子序列个数
示例代码
python
class Solution:
def numOfSubsequences(self, s: str) -> int:
n = len(s)
l = [0] * (n + 1)
t = [0] * (n + 1)
for i, c in enumerate(s):
l[i + 1] = l[i] + int(c == 'L')
for i in range(n - 1, -1, -1):
t[i] = t[i + 1] + int(s[i] == 'T')
base = lc = ct = 0
for i, c in enumerate(s):
if c == 'C':
base += l[i] * t[i]
lc += l[i]
ct += t[i]
ans = base + max(lc, ct)
for i in range(n):
ans = max(ans, base + l[i + 1] * t[i])
return ans3629. 通过质数传送到达终点的最少跳跃次数 - 力扣(LeetCode)
解题思路
BFS,记得标记已经访问过的元素,进行剪枝节省计算时间
示例代码
python
n = 10 ** 6 + 5
fac = [[] for _ in range(n)]
for i in range(2, n):
if not fac[i]:
for j in range(i, n, i):
fac[j].append(i)
class Solution:
def minJumps(self, nums: List[int]) -> int:
n = len(nums)
g = defaultdict(list)
for i, x in enumerate(nums):
for y in fac[x]:
g[y].append(i)
ans = 0
q = [0]
vis = [False] * n
while True:
tmp = q
q = []
for i in tmp:
if i == n - 1:
return ans
idx = g[nums[i]]
idx.append(i + 1)
if i:
idx.append(i - 1)
for j in idx:
if not vis[j]:
vis[j] = True
q.append(j)
idx.clear()
ans += 13630. 划分数组得到最大异或运算和与运算之和 - 力扣(LeetCode)
解题思路
参考:这道题很神秘,以后再来解决吧!
示例代码
python
TODO