LeetCode 第401场周赛个人题解

100325. 找出 K 秒后拿着球的孩子

原题链接

100325. 找出 K 秒后拿着球的孩子

思路分析

数据很小,暴力或者数学方法都行

数学方法就是对 n - 1做带余除法,看跑了奇数还是偶数趟,余数如何,确定位置

时间复杂度:O(1)

AC代码

python 复制代码
class Solution:
    def numberOfChild(self, n: int, k: int) -> int:
        a, r = divmod(k, n - 1)
        if a & 1:
            return n - 1 - r
        return r

100305. K 秒后第 N 个元素的值

原题链接

100305. K 秒后第 N 个元素的值

思路分析

为了抢时间直接暴力了

时间复杂度O(NK)

AC代码

python 复制代码
class Solution:
    def valueAfterKSeconds(self, n: int, k: int) -> int:
        a = [1] * n
        for _ in range(k):
            for i in range(1, n):
                a[i] += a[i - 1]
                a[i] %= (10**9 + 7)
        return a[n - 1]

100319. 执行操作可获得的最大总奖励 I

原题链接

100319. 执行操作可获得的最大总奖励 I

思路分析

见下面

AC代码

python 复制代码
from sortedcontainers import SortedList
class Solution:
    def maxTotalReward(self, w: List[int]) -> int:
        w = sorted(set(w))
        n = len(w)
        st, msk, p = 1, 0, 0
        for i in range(n):
            while p < w[i]:
                msk |= (1 << p) & st
                p += 1
            st |= msk << w[i]
        res = w[-1] * 2 - 1
        while not (st >> res & 1):
            res -= 1
        return res

100320. 执行操作可获得的最大总奖励 II

原题链接

100320. 执行操作可获得的最大总奖励 II

思路分析

其实就是01背包,每个数字选或不选

我们将物品升序排序

定义状态f(i, j)为前 i 个数是否能够凑够j

f(i, j) = { f(i, j) | f(i, j - w[i]) } | f(i - 1, j)

只涉及或运算,我们考虑bitset优化

分别记录当前集合的状态f, 和w[i]位之前的状态msk

那么f = f | msk

时间复杂度:O(NM / 64)

略解释一下bitset优化:我们每次都是将当前行的一段状态和上一行的一段状态做或运算,一个一个做太慢了,所以我们用二进制位来表示每一行的每个元素的状态,一个int可以表示32个状态,longlong同理,事实上按题面的数据量来说不一定能过,但是......

AC代码

python 复制代码
from sortedcontainers import SortedList
class Solution:
    def maxTotalReward(self, w: List[int]) -> int:
        w = sorted(set(w))
        n = len(w)
        st, msk, p = 1, 0, 0
        for i in range(n):
            while p < w[i]:
                msk |= (1 << p) & st
                p += 1
            st |= msk << w[i]
        res = w[-1] * 2 - 1
        while not (st >> res & 1):
            res -= 1
        return res
相关推荐
hsling松子1 小时前
使用PaddleHub智能生成,献上浓情国庆福
人工智能·算法·机器学习·语言模型·paddlepaddle
dengqingrui1232 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
C++忠实粉丝2 小时前
前缀和(8)_矩阵区域和
数据结构·c++·线性代数·算法·矩阵
ZZZ_O^O3 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
CV-King3 小时前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
代码雕刻家3 小时前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
雨中rain3 小时前
算法 | 位运算(哈希思想)
算法
Kalika0-05 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
sp_fyf_20245 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
我是哈哈hh7 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝