力扣第 460 场周赛

本文最后更新于 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 ans

3629. 通过质数传送到达终点的最少跳跃次数 - 力扣(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 += 1

3630. 划分数组得到最大异或运算和与运算之和 - 力扣(LeetCode)

解题思路

参考:这道题很神秘,以后再来解决吧!

示例代码

python
TODO
力扣第 162 场双周赛
力扣第 461 场周赛