一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。
    给你每一个项目开始的时间和结束的时间(给你一个数组,里面是一个个具体的项目)
    你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。
    返回这个最多的宣讲场次。

    1. // 会议的开始时间,结束时间
    2. public static class Program {
    3. public int start;
    4. public int end;
    5. public Program(int start, int end) {
    6. this.start = start;
    7. this.end = end;
    8. }
    9. }
    10. // 比较器,谁的结束时间早,谁排在前面
    11. public static class ProgramComparator implements Comparator<Program> {
    12. @Override
    13. public int compare(Program o1, Program o2) {
    14. return o1.end - o2.end;
    15. }
    16. }
    17. // 会议的开始时间和结束时间,都是数值,不会 < 0
    18. public static int bestArrange3(Program[] programs,int timePoint) {
    19. // timePoint 现在目前来到的时间点
    20. // 根据谁的结束时间早排序
    21. Arrays.sort(programs, new ProgramComparator());
    22. int result = 0;
    23. // 依次遍历每一个会议,结束时间早的会议先遍历
    24. for (int i = 0; i < programs.length; i++) {
    25. // 时间点要小于等于会议的开始时间,要比会议的开始时间要早
    26. if (timePoint <= programs[i].start) {
    27. result++; // 安排会议场次++
    28. timePoint = programs[i].end; // 更新时间点
    29. }
    30. }
    31. return result;
    32. }