《叠盘子排序》解题思路

65 阅读2分钟

解题思路笔记


知识点

  1. 数组分组:通过识别一组连续的整数序列,将其分组进行输出。

  2. 连续序列识别:检查数组中相邻元素的差是否为1,以确定是否属于同一个连续序列。

  3. 序列格式化:根据连续序列的长度条件选择输出格式:

    • 短序列(少于3个元素):单独输出每个数字。
    • 长序列(3个或更多元素):使用 start-end 记法表示该连续序列的起点和终点。
  4. 问题分析

    • 输入一个整数数组,代表盘子编号,按递增顺序排列。
    • 需要将盘子分组:若序列连续递增且长度≥3,用 start-end 表示;否则单独列出每个数字。
    • [-3, -2, -1, 2, 10, 15, 16, 18, 19, 20] 输出为 -3--1,2,10,15,16,18-20
  5. 方案设计

    • 使用遍历和条件判断来检测并构造每个连续序列,遇到长度符合的连续序列输出为 start-end;否则单独列出。
  6. 具体步骤

    • 初始化:创建空列表 result 用于存储分组结果。

    • 遍历:从头到尾遍历 plates 数组,检测连续数字:

      • 若当前元素和下一个元素相差1,则进入连续序列。
      • 若非连续,或到达数组末尾,结束当前序列。
    • 分组条件

      • 如果序列长度≥3,将其格式化为 start-end,否则直接记录单个数字。
    • 拼接结果:使用 ",".join(result) 将结果列表组合成字符串格式,得到最终输出。

  7. 边界条件

    • 数组长度小于3时,不会生成任何连续分组。
    • 检查最后一个序列是否已正确添加,避免遗漏。

相关代码如下 image.png