掘友等级
获得徽章 0
#刷题交流# 数列差异的最小化
公式简化:首先,我们可以将公式 ∣(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 和 b 进行排序。排序后,我们可以使用双指针技术来遍历数列 a 和 b,从而找到最小的差值。
双指针技术:
初始化两个指针 i 和 j,分别指向数列 a 和 b 的起始位置。
计算当前指针位置的差值 ∣(a[i]−b[j])2−k2∣。
根据差值的大小,移动指针 i 或 j,以期望找到更小的差值。
#刷题交流# 叠盘子排序
初始化:创建一个空列表 result 来存储最终的结果。
遍历数组:使用一个循环遍历数组 plates。
检查连续性:在遍历过程中,检查当前盘子是否与前一个盘子连续。
形成堆:如果连续,继续检查下一个盘子,直到不再连续或数组结束。
判断堆的大小:如果形成的堆大小至少为3,则将其格式化为 start-end 的形式;否则,单独列出每个盘子。
拼接结果:将所有形成的堆和单独列出的盘子拼接成一个字符串。
#刷题交流# 字符串最短循环子串
初始化两个指针 left 和 right 都指向字符串的起始位置。
遍历字符串,尝试扩展 right 指针,直到窗口内的修复操作次数超过 m。
当修复操作次数超过 m 时,移动 left 指针,缩小窗口,直到修复操作次数再次小于等于 m。
在每次扩展 right 指针时,记录当前窗口的长度,并更新最大长度。
#刷题交流# 字符串最短循环子串
遍历可能的子串长度:从1到字符串长度的一半(因为子串长度至少要是原字符串长度的一半才能重复构成原字符串)。
检查每个子串:对于每个可能的子串长度,提取该长度的子串,并检查它是否可以重复构成原字符串。
判断重复性:通过将子串重复若干次,判断是否等于原字符串。
返回结果:如果找到符合条件的子串,返回该子串;否则,返回空字符串
#刷题交流# 数字增值问题
初始化:从初始序列 [1, 2, ..., n] 开始。
增殖操作:对于每次增殖操作,计算新的序列长度,并判断是否需要继续增殖。
查找位置:在最终的序列中查找第 p 个位置的数字。
#刷题交流# 倒排索引
初始化指针:分别在 a 和 b 的开头设置两个指针 i 和 j。
遍历数组:
如果 a[i] 等于 b[j],则将该元素加入结果集,并同时移动两个指针。
如果 a[i] 小于 b[j],则移动 i 指针。
如果 a[i] 大于 b[j],则移动 j 指针。
结果排序:由于我们需要结果按从大到小的顺序,可以在最后对结果集进行排序。
#刷题交流# 组装电脑问题
计算所有可能的售价:对于每个外壳售价 a_i 和每个零件售价 b_j,计算它们的和 a_i + b_j。
统计每个售价的出现次数:使用哈希表记录每个售价的出现次数。
找出出现次数最多的售价:遍历哈希表,找出出现次数最多的售价,这个次数就是最多可以组装的电脑数量。
#刷题交流# Base32 编码和解码问题
编码:
将输入字符串转换为二进制数据。
补 0 使 bit 数目为 5 的倍数。
按 5 bit 分组,转换为索引,再转换为字符。
根据余数补 +。
解码:
将编码字符串转换为二进制数据。
去除末尾的 +。
按 8 bit 分组,转换为字符。
#刷题交流# 递归是一种在函数中调用自身的编程技术,用于解决具有重复结构的问题。它通过将问题分解为更小的子问题来实现,直到达到基本情况停止递归。
#刷题交流# 题:石子移动问题
思路:
排序:首先对石子位置进行排序,以便更容易找到端点石子。
计算初始端点石子:找到初始的端点石子数量。
模拟移动:模拟移动过程,每次移动一个端点石子到一个未占用的位置,直到石子位置变得连续。
计算移动次数:记录每次移动的次数,直到无法再移动为止。
下一页