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

136 阅读3分钟

标题:叠盘子排序 | 豆包MarsCode AI刷题

题目解析

思路

本题要求编写程序帮助小M确定盘子的叠放方式。输入参数是一个整数数组 plates,表示盘子的序号,以及盘子总数 n。输出应按照连续递增的顺序排列,并且至少包含3个盘子。如果不能满足这个条件,则单独列出。

算法的核心思想是遍历数组,找到连续递增的盘子序列,并将其合并。具体步骤如下:

  1. 初始化变量 startend 分别指向当前连续递增序列的起始位置和结束位置。
  2. 遍历数组,当遇到下一个盘子的序号等于前一个盘子的序号加1时,更新 end
  3. 当遇到不连续的情况时,判断是否满足连续递增至少3个的条件。如果不满足,则单独列出该盘子;否则,将连续递增的序列添加到结果字符串中。
  4. 最终返回结果字符串。

代码详解

public class Main {
    public static String solution(int[] plates, int n) {
        StringBuilder result = new StringBuilder();
        int start = plates[0];
        int end = plates[0];

        for (int i = 1; i < n; i++) {
            if (plates[i] == end + 1) {
                end = plates[i];
            } else {
                if (end - start >= 2) {
                    result.append(start).append("-").append(end);
                } else {
                    for (int j = start; j <= end; j++) {
                        result.append(j);
                        if (j != end) {
                            result.append(",");
                        }
                    }
                }
                start = plates[i];
                end = plates[i];
            }
        }

        // 处理最后一个连续递增序列
        if (end - start >= 2) {
            result.append(start).append("-").append(end);
        } else {
            for (int j = start; j <= end; j++) {
                result.append(j);
                if (j != end) {
                    result.append(",");
                }
            }
        }

        // 去掉末尾多余的逗号
        if (result.charAt(result.length() - 1) == ',') {
            result.deleteCharAt(result.length() - 1);
        }

        return result.toString();
    }

    public static void main(String[] args) {
        System.out.println(solution(new int[]{-3, -2, -1, 2, 10, 15, 16, 18, 19, 20}, 10));
        System.out.println(solution(new int[]{-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20}, 20));
        System.out.println(solution(new int[]{1, 2, 7, 8, 9, 10, 11, 19}, 8));
    }
}

知识总结

  1. StringBuilder类:在Java中,StringBuilder 类提供了一个可变的字符串对象,允许我们在运行时修改其内容。这对于频繁修改字符串的操作非常有用,比如在循环中逐个添加字符。
  2. 数组遍历:通过for循环遍历数组是一种常见的做法,可以方便地访问数组中的每个元素并执行相应的操作。
  3. 条件判断:使用if语句进行条件判断,根据不同的条件执行不同的逻辑分支。

学习计划

  1. 每日刷题:每天抽出一段时间专门用于刷题,可以选择豆包MarsCode AI刷题平台上的题目,从易到难逐渐提高难度。
  2. 错题回顾:对于做错的题目,要仔细分析错误原因,理解正确的解题思路,并再次尝试解答。
  3. 知识点整理:每次完成一组题目后,整理所涉及的知识点,加深记忆。
  4. 实践应用:尝试将学到的知识点应用到实际项目中,巩固理论知识的同时提高动手能力。

工具运用

  1. 豆包MarsCode AI刷题:利用AI推荐系统,根据自身水平和兴趣推荐合适的题目,提高学习效率。
  2. 在线文档和教程:参考官方文档和高质量的在线教程,深入理解相关概念和技术细节。
  3. 社区交流:积极参与技术社区的讨论,向他人请教不懂的地方,分享自己的学习心得,互相促进。

通过以上方法,可以有效地提升编程技能和解决问题的能力。