获得徽章 0
#刷题交流# 神奇字符串构造问题
初始化计数器:用于记录需要删除的字符数量。
遍历字符串:从第一个字符开始,检查每三个字符是否相同。
处理不满足条件的情况:
如果当前字符与下一个字符不同,删除当前字符,并增加计数器。
如果当前字符与下两个字符不同,删除当前字符,并增加计数器。
调整字符串长度:确保字符串的长度是3的倍数。
返回结果:返回需要删除的字符数量。
4. 具体实现
我们可以使用一个循环来遍历字符串,并在每次循环中检查当前字符及其后续两个字符是否相同。
如果发现不满足条件的情况,我们可以选择删除当前字符,并继续检查。
最后,确保字符串的长度是3的倍数,如果不够,则删除多余的尾部字符。
展开
评论
#刷题交流# 疯狂整数的统计
从最小的疯狂整数 1 开始,逐步生成下一个疯狂整数(即在当前疯狂整数后面添加 1 或 2)。
每次生成一个新的疯狂整数后,检查它是否小于或等于 N。
如果满足条件,则计数加一,继续生成下一个疯狂整数。
如果不满足条件,则停止生成。
展开
评论
#刷题交流# 蛇形填充n阶方阵
初始化方阵:创建一个 n x n 的二维列表,初始值为 0。
定义填充方向:我们需要定义四个方向(右、下、左、上),并按照顺时针顺序进行填充。
填充数字:从右上角开始,按照定义的方向依次填充数字。每填充一个数字,检查下一个位置是否已经填充过或者超出边界,如果是,则改变方向。
处理波浪形填充:在每一层的填充过程中,需要交替改变填充方向,形成波浪形。
展开
评论
#刷题交流# 偶数喜好问题
初始化:定义一个变量 max_even_factors 来记录当前找到的最大偶数因子数量,初始值为0。定义一个变量 favorite_number 来记录当前偶数因子最多的数,初始值为 l。

遍历区间:从 l 到 r 遍历每一个数。

计算偶数因子数量:对于每一个数,计算其偶数因子的数量。具体步骤如下:

如果当前数是奇数,直接跳过。
如果当前数是偶数,进行因数分解,统计偶数因子的数量。
更新结果:如果当前数的偶数因子数量大于 max_even_factors,则更新 max_even_factors 和 favorite_number。

返回结果:遍历结束后,favorite_number 就是小C最喜欢的数。
展开
评论
#刷题交流# 打点计数器的区间合并
排序:使用Python的sorted函数对区间进行排序,排序的关键是区间的起始点。
合并区间:遍历排序后的区间,如果当前区间的起始点小于等于上一个区间的结束点,则合并这两个区间;否则,将当前区间作为一个新的区间加入结果列表。
计算总数:遍历合并后的区间,计算每个区间中的数字总数,并累加。
展开
评论
#刷题交流# 工作任务分配问题
二分查找:

设定一个范围来查找最小最大工作时长。这个范围可以从 max(jobs)(即单个作业的最大时长)到 sum(jobs)(即所有作业的总时长)。
在这个范围内进行二分查找,每次查找一个中间值 mid,判断是否可以将作业分配给 k 名员工,使得每个员工的工作时长都不超过 mid。
贪心分配:

对于每个二分查找的中间值 mid,尝试将作业分配给员工,确保每个员工的工作时长不超过 mid。
如果能够成功分配,说明 mid 是一个可行解,继续在较小的范围内查找更小的 mid。
如果不能成功分配,说明 mid 太小,需要在较大的范围内查找。
展开
评论
#刷题交流# 等和子数组问题
初始化一个哈希表,用于存储子数组的和。
遍历数组,计算从每个位置开始的子数组的和。
检查哈希表,如果当前子数组的和已经在哈希表中存在,说明找到了两个和相等的不同子数组,返回1。
如果遍历结束,没有找到这样的子数组,返回0。
展开
评论
#刷题交流# 学习技能时间计算
初始化当前属性值:current_attributes = [0, 0, 0]。
遍历每一天:
更新 current_attributes。
检查是否满足某个技能的学习要求。
如果满足,记录当前的天数。
处理未满足的技能:对于那些在遍历结束后仍未满足学习要求的技能,将其对应的天数设置为 -1。
展开
评论
#刷题交流# 最少补给次数
初始化:

当前位置 current_position = 0
当前水量 current_water = W
补给次数 supply_count = 0
遍历补给站:

对于每个补给站,检查是否能够到达。
如果能够到达,更新当前位置和水量。
如果不能到达,返回-1。
判断终点:

在遍历完所有补给站后,检查是否能够到达终点。
如果能够到达,返回补给次数。
如果不能到达,返回-1。
展开
评论
#刷题交流# 移动点问题
初始化数据结构:创建两个字典,一个用于存储每一行上的点数,另一个用于存储每一列上的点数。
遍历所有点:对于每一个点,更新对应的行和列的计数器。
计算需要增加的点数:遍历每一行和每一列的计数器,如果某一行或某一列上的点数少于2,则需要增加点数以确保该行或该列上至少有两个点。
展开
评论
#刷题交流# 最大乘积区间问题
初始化变量:
max_product 用于记录当前找到的最大乘积。
best_start 和 best_end 用于记录当前最大乘积区间的起始和结束位置。
遍历所有可能的区间:
使用两个嵌套循环,外层循环控制区间的起始位置 start,内层循环控制区间的结束位置 end。
在每次内层循环中,计算从 start 到 end 的区间乘积。
如果当前区间的乘积大于 max_product,更新 max_product 以及 best_start 和 best_end。
如果当前区间的乘积等于 max_product,比较当前区间的起始位置和结束位置,选择更优的区间。
处理特殊情况:
如果数组中包含零,零会使得乘积变为零,因此需要特别处理。
展开
评论
#刷题交流# 完美偶数计数
遍历数组:从数组的第一个元素到最后一个元素。
检查条件:对于每个元素,检查它是否是偶数,并且是否在区间 [l, r] 之间。
计数:如果满足条件,则计数器加一。
返回结果:遍历结束后,返回计数器的值。
展开
1
#刷题交流# 极差之和
**构造数组 b**:

遍历数组 a,根据 a[i] 的值构造数组 b。
计算极差之和:

对于数组 b 中的每一个子数组,计算其极差。
累加所有子数组的极差,并对 109+7 取模。
展开
评论
#刷题交流# 螺旋陈列问题
初始化一个 width x width 的二维数组 matrix,所有元素为0。
定义四个边界:top = 0, bottom = width - 1, left = 0, right = width - 1。
使用一个循环来填充螺旋:
从左到右填充上边界。
从上到下填充右边界。
从右到左填充下边界。
从下到上填充左边界。
每次填充完一层后,更新边界:top += 1, bottom -= 1, left += 1, right -= 1。
当 top > bottom 或 left > right 时,停止填充。
展开
评论
#刷题交流# 数列差异的最小化
公式简化:首先,我们可以将公式 ∣(a[i]−b[j])2−k2∣ 进行简化。注意到 (a[i]−b[j])2−k2 可以分解为 (a[i]−b[j]−k)(a[i]−b[j]+k)。因此,我们需要找到使得 ∣(a[i]−b[j]−k)(a[i]−b[j]+k)∣ 最小的 a[i] 和 b[j]。

排序:为了高效地找到最接近的 a[i]−b[j],我们可以对数列 a 和 b 进行排序。排序后,我们可以使用双指针技术来遍历数列 a 和 b,从而找到最接近 k 的差值。

双指针技术:

初始化两个指针 i 和 j,分别指向数列 a 和 b 的起始位置。
计算当前的差值 diff = a[i] - b[j]。
如果 diff 大于 k,则增加 j 以减小 diff。
如果 diff 小于 k,则增加 i 以增大 diff。
如果 diff 等于 k,则直接返回 0,因为此时公式值为 0。
在每一步中,记录 ∣(a[i]−b[j]−k)(a[i]−b[j]+k)∣ 的最小值。
展开
评论
#刷题交流# 字符串操作字典序最优问题:
算法步骤:
初始化: 将输入字符串 s 转换为列表,以便进行操作。
生成所有可能的序列:
通过旋转操作,生成所有可能的旋转序列。
对每个旋转序列应用魔法 a,生成所有可能的增量序列。
比较字典序:
比较所有生成的序列,找到字典序最小的序列。
优化:

由于旋转和增量操作可能会产生重复的序列,可以使用集合来存储已经生成的序列,避免重复计算。
展开
评论
#刷题交流# 卡牌翻面求和问题
初始化:
创建一个大小为 (n+1) x 3 的二维数组 dp。
设置 dp[0][0] = 1,dp[0][1] = 0,dp[0][2] = 0。
状态转移:
对于每一张卡牌 i(从1到n):
计算选择正面 a[i-1] 和背面 b[i-1] 对3取模的结果。
更新 dp[i][j],考虑选择正面或背面的情况。
最终结果:
返回 dp[n][0],即前 n 张卡牌中,使得数字之和对3取模结果为0的方案数。
展开
评论
#刷题交流# 问题:倒排索引
a 和 b 是有序数组,利用双指针法来高效地找出交集。
初始化指针:分别在 a 和 b 的开头设置两个指针 i 和 j。
遍历数组:
如果 a[i] 等于 b[j],则将该元素加入结果集,并同时移动两个指针。
如果 a[i] 小于 b[j],则移动 i 指针。
如果 a[i] 大于 b[j],则移动 j 指针。
结果排序:由于我们需要结果按从大到小的顺序,可以在最后对结果集进行排序。
关键点:
双指针法可以在线性时间内完成交集的查找。
结果集的排序可以在最后一步完成,以确保结果的顺序正确。
展开
评论
#刷题交流# 问题:三倍子数组
计算前缀和:遍历数组,计算每个位置的前缀和。
模3的结果:对于每个前缀和,计算其对3取模的结果。
哈希表存储:使用哈希表存储每个模3结果的最早出现位置。
查找最大子数组:如果当前前缀和模3的结果在哈希表中已经存在,说明从哈希表中存储的索引到当前索引之间的子数组和是3的倍数。计算这些子数组的和,并更新最大和。
更新哈希表:在遍历过程中,更新哈希表中的索引
展开
评论
#刷题交流# 取模运算:是计算两个整数相除后的余数的操作,通常用符号 % 表示。例如,a % b 表示
a 除以 b的余数
评论
下一页
个人成就
文章被点赞 1
文章被阅读 2,247
掘力值 34
收藏集
0
关注标签
19
加入于