贪心算法-会议室问题

1、题目描述

一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目。现在给你两个长度一样的数组,starts数组代码每个会议开始的时间,ends数组代表每个会议结束的时间。

在给你一个当前时间,请你求出当日可以利用会议室宣讲的最大值

思路分析:

1.按照最早开始的会议排序,最早开始的优先。

2.按照最短时间排序,时间最短的优先。

3.按照最早结束排序,最早结束的优先。

贪心算法是纯粹的积累经验类型的算法思想,贪心策略的正确性证明是非常困难的,几乎不可能证明正确性,因此,只能通过对数器进行验证。同时,可以举反例排除错误的贪心策略。

比如上面的:

1.如果最早开始的会议时间是最长呢?直接怼一天的话,显然不合理对吧?

2.如果最短的会议在中间呢?导致它前面的时间浪费了,后面的时间可能正好差一点不够一个会议,这样也很浪费,肯定不是最优解。

因此,排除掉1和2,此题的最优贪心算法应该就是3。

解题思路:
是按照项目完成时间,从前到后排序,先做最早结束的项目,然后淘汰掉不能再做的项目

c 复制代码
public static class Program {
   public int start;
   public int end;

   public Program(int start, int end) {
      this.start = start;
      this.end = end;
   }
}
// 会议的开始时间和结束时间,都是数值,不会 < 0
public static int bestArrange2(Program[] programs) {
   Arrays.sort(programs, new ProgramComparator());
   int timeLine = 0;
   int result = 0;
   // 依次遍历每一个会议,结束时间早的会议先遍历
   for (int i = 0; i < programs.length; i++) {
      if (timeLine <= programs[i].start) {
         result++;
         timeLine = programs[i].end;
      }
   }
   return result;
}

public static class ProgramComparator implements Comparator<Program> {

   @Override
   public int compare(Program o1, Program o2) {
      return o1.end - o2.end;
   }

}
相关推荐
STY_fish_201212 分钟前
手拆STL
java·c++·算法
小纭在努力16 分钟前
【算法设计与分析】实验——改写二分搜索算法,众数问题(算法分析:主要算法思路),有重复元素的排列问题,整数因子分解问题(算法实现:过程,分析,小结)
数据结构·python·学习·算法·算法设计与分析·实验报告·实验
芜湖xin1 小时前
【题解-洛谷】B4278 [蓝桥杯青少年组国赛 2023] 简单算术题
算法·
理智的灰太狼1 小时前
题目 3298: 蓝桥杯2024年第十五届决赛真题-兔子集结
算法·职场和发展·蓝桥杯
kingmax542120084 小时前
【洛谷P9303题解】AC- [CCC 2023 J5] CCC Word Hunt
数据结构·c++·算法·广度优先
白熊1885 小时前
【机器学习基础】机器学习入门核心算法:XGBoost 和 LightGBM
人工智能·算法·机器学习
bai_lan_ya5 小时前
数据结构-排序-排序的七种算法(2)
数据结构·算法·排序算法
全域智图7 小时前
元胞自动机(Cellular Automata, CA)
人工智能·算法·机器学习
珂朵莉MM7 小时前
2022 RoboCom 世界机器人开发者大赛-本科组(省赛)解题报告 | 珂学家
人工智能·算法·职场和发展·深度优先·图论
独家回忆3647 小时前
每日算法-250601
数据结构·算法