叠盘子排序|豆包MarsCode Al刷题

84 阅读3分钟

问题描述

小M有一个独特的方式来收拾家中的盘子。每次用餐后,他会将盘子按照他们的序号顺序叠放。盘子的序号都是唯一的整数,并且在收拾前就是递增的。小M的叠放规则是,每一堆盘子的序号都是连续递增的,并且至少包含3个盘子。需要编写程序帮助小M确定盘子的叠放方式。

例如,输入的盘子序号是 [-3, -2, -1, 2, 10, 15, 16, 18, 19, 20],按照小M的规则,连续递增序列 -3, -2, -1 可以叠在一起表示为 -3--1,而 18, 19, 20 可以叠在一起表示为 18-20。不满足连续递增至少3个的,如 2, 10, 15, 16 都应单独列出。

输入参数

  • plates: 一个整数数组,表示盘子的序号
  • n: 盘子总数

问题分析

题目要求我们将一个有序的整数数组(表示盘子的序号)按照特定的规则进行分组。具体规则是:

  • 如果一组盘子的序号是连续递增的,并且至少包含3个盘子,则将它们合并为一个区间表示。
  • 如果不满足连续递增至少3个盘子的条件,则每个盘子单独列出。

解题步骤

  1. 遍历数组:从数组的第一个元素开始遍历,找到连续递增的序列。
  2. 查找连续递增序列:在遍历过程中,检查当前元素是否与下一个元素连续递增。如果是,继续遍历直到不再连续递增。
  3. 判断序列长度:检查找到的连续递增序列的长度是否至少为3。
    • 如果长度至少为3,则将该序列合并为一个区间表示(例如 start-end)。
    • 如果长度不足3,则将每个元素单独列出。
  4. 拼接结果:将所有符合条件的序列和单独的元素拼接成一个字符串,并用逗号分隔。
  5. 处理边界情况:确保最后一个元素或最后一个序列正确处理,避免多余的逗号。

数据结构选择

  • StringBuilder:用于高效地拼接字符串。
  • 数组遍历:通过遍历数组来查找连续递增序列。

算法步骤

  1. 初始化一个 StringBuilder 用于存储最终结果。
  2. 遍历数组,使用一个指针 i 来跟踪当前位置。
  3. 对于每个位置 i,找到连续递增序列的结束位置。
  4. 判断序列长度是否满足条件,并相应地处理:
    • 如果满足条件,将序列合并为区间表示。
    • 如果不满足条件,将每个元素单独列出。
  5. 移动到下一个位置,继续遍历。
  6. 最后,移除结果字符串中最后一个多余的逗号。

通过这些步骤,我们可以有效地解决这个问题,并生成符合要求的输出字符串。