中等题合集(2) | 豆包MarsCode AI刷题

52 阅读2分钟

14 数组元素之和最小化

问题理解
  1. 两两不同:数组中的所有元素必须是唯一的。
  2. 最大公约数 K:数组中的所有元素必须是 k 的倍数。
  3. 元素之和尽可能小:我们需要找到 n 个最小的 k 的倍数,使得它们的和最小。
解题思路
  1. 生成数组:从 k 开始,逐个生成 k 的倍数,直到生成 n 个不同的数。
  2. 计算和:将这些数相加,得到数组元素之和。
核心代码

24 小R的随机播放顺序

问题理解

播放规则:

  1. 播放歌单中的第一首歌,并将其从歌单中移除。
  2. 如果歌单中还有歌曲,则将当前第一首歌移到最后一首。
  3. 重复上述步骤,直到歌单中没有任何歌曲。

我们可以使用一个队列(Queue)来模拟歌单的操作。队列的特点是先进先出(FIFO),非常适合用来处理这种需要按顺序移除和移动元素的问题。

解题思路
  1. 初始化队列:将输入的歌单数组转换为队列。
  2. 模拟播放过程
    • 使用一个列表来存储最终的播放顺序。
    • 循环处理队列中的歌曲,直到队列为空。
    • 每次从队列头部取出歌曲并添加到播放顺序列表中。
    • 如果队列不为空,将队列头部的歌曲移到队列尾部。
  1. 返回结果:将播放顺序列表转换为数组并返回。
核心代码

31 不同整数的计数问题

问题理解

题目的要求:

  1. 替换非数字字符:我们需要遍历字符串,将所有非数字字符替换为空格。
  2. 提取整数:在替换后的字符串中,提取出所有的整数。
  3. 去重并统计不同整数的数量:使用集合来存储不同的整数,并统计集合的大小。
解题思路
  1. 替换非数字字符:使用 StringBuilder 来构建新的字符串,遍历输入字符串,如果是数字则添加到 StringBuilder 中,否则添加空格。
  2. 提取整数
    • 使用 split("\s+") 将字符串按空格分割成多个部分。
    • 遍历这些部分,去除前导零(使用 replaceFirst("^0+(?!$)", "") ),并将结果添加到 Set 中。
  1. 去重并统计不同整数的数量:使用 Set 来存储不同的整数,最后返回 Set 的大小。
核心代码