获得徽章 0
- #刷题交流# 24 小R的随机播放顺序
知识点扩展
双端队列(deque):双端队列是一种允许在两端进行插入和删除操作的队列。在本题中,我们利用了双端队列的特性,可以方便地进行队首和队尾的操作。
模拟算法:模拟算法是一种通过模拟实际过程来解决问题的方法。在本题中,我们通过模拟歌曲播放的规则,逐步构建出最终的播放顺序。
assert n == len(a)
q = deque(a)
a = []
for _ in range(n):
a.append(q.popleft())
if q:
q.append(q.popleft())
return a展开评论点赞 - #刷题交流# 19字典序最小的01字符串
理解问题:我们需要通过交换相邻字符来最小化字符串的字典序。
选择数据结构:我们可以使用一个列表来存储字符串的字符,以便于进行交换操作。
算法步骤:
遍历字符串,尝试将当前字符移动到尽可能靠前的位置。
每次交换相邻字符时,减少 k 的值。
如果 k 变为 0,则停止操作。展开评论点赞 - #刷题交流# 32二分数字组合
初始化动态规划表:
创建一个二维数组 dp,其中 dp[i][j] 表示前 i 个元素中,和的个位数为 j 的子集的数量。
初始化 dp[0][0] = 1,表示空集的和为 0。
计算数组元素的总和的个位数:
计算数组 array_a 中所有元素的总和,并取其个位数 sum_value。
特殊情况处理:
如果 sum_value 等于 B,则说明所有元素可以形成一组,另一组为空,这种情况计数加 1。
动态规划更新:
如果 sum_value 等于 (A + B) % 10,则进行动态规划更新:
遍历数组中的每个元素,更新 dp 表,计算包含当前元素和不包含当前元素的子集的和的个位数。
最终 dp[n][A] 即为满足条件的划分方式的数量。
返回结果:
如果 sum_value 等于 A,则说明所有元素可以形成一组,另一组为空,这种情况计数加 1。
返回满足条件的划分方式的总数。展开评论点赞 - #刷题交流# 28比赛配对问题
关键点
偶数队伍:如果当前队伍数为偶数,每支队伍都会与另一支队伍配对,进行 n / 2 场比赛,产生 n / 2 支队伍进入下一轮。
奇数队伍:如果当前队伍数为奇数,随机轮空并晋级一支队伍,其余的队伍配对,进行 (n - 1) / 2 场比赛,产生 (n - 1) / 2 + 1 支队伍进入下一轮。
解题思路
初始条件:从 n 支队伍开始。
循环处理:
如果当前队伍数为偶数,计算配对次数并更新队伍数。
如果当前队伍数为奇数,计算配对次数并更新队伍数。
终止条件:当队伍数减少到1时,比赛结束。
算法步骤
初始化一个变量 total_matches 用于记录总的配对次数。
使用一个循环,直到队伍数减少到1:
如果队伍数为偶数,计算当前轮的配对次数并更新队伍数。
如果队伍数为奇数,计算当前轮的配对次数并更新队伍数。
返回 total_matches。展开赞过评论1
![[看]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_97.39cdc9f.png)