掘友等级
获得徽章 0
#刷题交流# 数字匹配问题
排序:对数组 X 进行排序。
双指针遍历:
使用两个指针 i 和 j,初始时 i 指向数组的第一个元素,j 指向第二个元素。
如果 X[j] - X[i] >= M,则可以形成一对,记录这对,并将 i 和 j 都向前移动。
如果 X[j] - X[i] < M,则只移动 j,尝试找到更大的差值。
计数:记录成功配对的对数。
#刷题交流# 红色格子染色方案数计算
定义状态:
设 dp[i] 表示从第 i 个格子开始,将所有格子染成红色的不同方式数。
初始化:
如果第 i 个格子是红色的(s[i] == '1'),则 dp[i] = 1。
如果第 i 个格子是无色的(s[i] == '0'),则 dp[i] = 0。
状态转移:
对于每个红色的格子 i,我们可以向左或向右染色。
如果 i + 1 是无色的,则 dp[i + 1] += dp[i]。
如果 i - 1 是无色的,则 dp[i - 1] += dp[i]。
最终结果:
最终的结果是所有格子都被染成红色的方式数之和,即 sum(dp)。
#刷题交流# 字符传解码问题
初始化:创建一个空列表 decoded_chars 用于存储解码后的字符。
遍历字符串:遍历字符串 S 中的每一个字符。
解码:
如果字符是 'x',将其替换为 'y'。
如果字符是 'y',将其替换为 'x'。
如果字符是 'a',将其替换为 'b'。
如果字符是 'b',将其替换为 'a'。
其他字符保持不变。
构建结果:将解码后的字符列表转换为字符串并返回
#刷题交流# 三元组删除问题
排序数组:首先对数组 a 进行排序,这样可以确保 x < y < z 的条件在遍历过程中自然满足。
构建哈希表:遍历数组 a,将每个数字及其出现的次数存储在哈希表中。
查找三元组:遍历哈希表,对于每个数字 x,查找其倍数 y 和 z,如果存在满足条件的三元组,则计数并从哈希表中移除这些数字(因为每个数字只能使用一次)。
返回结果:最终返回找到的三元组数量。
#刷题交流# 最小移动次数使数组相等
直接比较:
遍历数组 A 和 B,检查是否可以通过对 A 中的每个元素进行加减操作来使 A 等于 B。
如果可以,记录操作次数。
反转比较:
反转数组 A。
再次遍历数组 A 和 B,检查是否可以通过对 A 中的每个元素进行加减操作来使 A 等于 B。
如果可以,记录操作次数。
取最小值:
比较直接比较和反转比较的结果,取最小值作为最终答案。
#刷题交流# ip报文头解析问题
解析输入字符串:将输入的十六进制字符串按空格分割成字节数组。
提取总长度:将前两个字节转换为十进制整数。
提取标志位:根据IP报文头的结构,找到标志位所在的位置,并将其转换为十进制整数。
提取目的IP地址:将最后四个字节转换为点分十进制格式的IP地址。
格式化输出:将总长度、标志位和目的IP地址用逗号分隔并返回。
#刷题交流# 二进制字符串覆盖问题
生成子字符串集合:遍历字符串 s,生成所有可能的子字符串,并将它们存储在一个集合中。
检查二进制表示:对于 [1, n] 范围内的每个整数,将其转换为二进制字符串,并检查该字符串是否在子字符串集合中。
返回结果:如果所有整数的二进制表示都在集合中,返回 True,否则返回 False。
#刷题交流# 数列差异的最小化
公式简化:首先,我们可以将公式 ∣(a[i]−b[j])2−k2∣ 进行简化。注意到 (a[i]−b[j])2 是一个平方项,而 k2 是一个常数项。我们可以将其简化为 ∣(a[i]−b[j])2−k2∣=∣(a[i]−b[j]+k)(a[i]−b[j]−k)∣。
排序:为了高效地找到最小的差值,我们可以先对数列 a 和 b 进行排序。排序后的数列可以帮助我们更快地找到最接近的元素对。
双指针法:使用双指针法来遍历排序后的数列 a 和 b。初始时,两个指针分别指向数列 a 和 b 的起始位置。然后根据当前的差值调整指针的位置,直到找到最小的差值。
#刷题交流# 最大相等分割红包金额
计算前缀和数组:首先计算红包数组的前缀和数组,这样我们可以快速计算任意子数组的和。
遍历可能的切割点:我们需要遍历所有可能的切割点对 (i, j),其中 i 是第一个切割点,j 是第二个切割点。
检查条件:对于每一对切割点 (i, j),检查第一部分和第三部分的和是否相等。
更新最大值:如果相等,更新当前的最大奖金金额。
#刷题交流# 字符修复问题
初始化两个指针 left 和 right 都指向字符串的起始位置。
遍历字符串,尝试扩展右边界 right,同时记录当前窗口内字符的频率和可以修复的字符数量。
如果修复次数超过 m,则收缩左边界 left,直到修复次数不超过 m。
在每次扩展右边界时,更新最长连续子串的长度。
下一页