LeetCode

最多可以参加的会议数目

给你一个数组 event ,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。

你可以在满足 startDayi <= d <= endDayi 中的任意一天 d 参加会议 i 。注意,一天只能参加一个会议。

请你返回你可以参加的 最大 会议数目。

示例1:

输入:events = [[1,2],[2,3],[3,4]]
输出:3
解释:你可以参加所有的三个会议。
安排会议的一种方案如上图。
第 1 天参加第一个会议。
第 2 天参加第二个会议。
第 3 天参加第三个会议。

示例 2:

输入:events= [[1,2],[2,3],[3,4],[1,2]]
输出:4
示例 3:输入:events = [[1,4],[4,4],[2,2],[3,4],[1,1]]
输出:4

示例 4:

输入:events = [[1,100000]]
输出:1

示例 5:

输入:events = [[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7]]
输出:7

提示:

  • 1 <= events.length <= 10^5
  • events[i].length == 2
  • 1 <= events[i][0] <= events[i][1] <= 10^5

解法:贪心算法

解题思路:

我们可以从第一天开始遍历,然后找到这一天可以参加的所有会议,贪心的选择一个结束时间最早的会议参加,因为结束时间最早的会议能参加的机会比较少

因此我们可以用一个优先队列来实现,带有注释的代码如下

class Solution {public int maxEvents(int[][] events) {//首先排序:开始时间小的在前。这样是方便我们顺序遍历,把开始时间一样的都放进堆Arrays.sort(events, (o1, o2) -> o1[0] - o2[0]);//小顶堆PriorityQueue<Integer> pq = new PriorityQueue<>();//结果、开始时间、events下标、有多少组数据int res = 0, last = 1, i = 0, n = events.length;while (i < n || !pq.isEmpty()) {//将start相同的会议都放进堆里while (i < n && events[i][0] == last) {pq.offer(events[i++][1]);}//pop掉当前天数之前的while (!pq.isEmpty() && pq.peek() < last) {pq.poll();}//顶上的就是俺们要参加的if (!pq.isEmpty()) {pq.poll();res++;}last++;}return res;}
}

解法来源

作者:jerry_nju
链接:https://leetcode-cn.com/problems/maximum-number-of-events-that-can-be-attended/solution/chun-cui-de-tan-xin-mei-yong-you-xian-dui-lie-dai-/
来源:力扣(LeetCode)
e-attended/solution/chun-cui-de-tan-xin-mei-yong-you-xian-dui-lie-dai-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最多可以参加的会议数目--贪心算法相关推荐

  1. leetcode1353. 最多可以参加的会议数目(贪心算法)

    给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi . 你可以在满足 startD ...

  2. LeetCode 1353. 最多可以参加的会议数目(排序+贪心,优先队列,难)

    文章目录 1. 题目 2. 解题 2.1 错误解 2.2 超时解 2.3 通过解 2.4 大佬解 1. 题目 给你一个数组 events,其中 events[i] = [startDayi, endD ...

  3. LeetCode 1751. 最多可以参加的会议数目 II(DP + 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startD ...

  4. Leetcode 1353:最多可以参加的会议数目(超详细的解法!!!)

    给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi . 你可以在满足 startD ...

  5. [leetcode] 5342. 最多可以参加的会议数目

    参考:https://leetcode-cn.com/problems/maximum-number-of-events-that-can-be-attended/solution/sao-miao- ...

  6. 1705. 吃苹果的最大数目(贪心算法)

    1705. 吃苹果的最大数目 难度中等104 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果.在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也 ...

  7. 1546. 和为目标值且不重叠的非空子数组的最大数目-贪心算法

    1546. 和为目标值且不重叠的非空子数组的最大数目 给你一个数组 nums 和一个整数 target . 请你返回 非空不重叠 子数组的最大数目,且每个子数组中数字和都为 target . 示例 1 ...

  8. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  9. 贪心算法求解一个序列中出现次数最多的元素问题

    贪心算法求解一个序列中出现次数最多的元素问题 题目: 指定n个正整数,编写一个实验程序找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一个. 输入描述:输入的第1行只有一个正整数n(1 ...

最新文章

  1. 服不服?40行Python代码,实现卷积特征可视化
  2. 阿里巴巴发布AI养蜂系统
  3. cocos creator怎么隐藏组件(setVisible)
  4. 邱键2008年最幸运的选手
  5. vim在每行行首或行尾添加/删除内容
  6. 系统架构师学习笔记_第十四章_连载
  7. 前端学习(1879)vue之电商管理系统电商系统之通过axios拦截器添加token认证
  8. 使用Python配合Evernote完成每周工作安排
  9. 【华为云技术分享】实战笔记丨JDBC问题定位指南
  10. utf8转gb2312 c语言,UTF-8, Unicode, GB2312格式串转换之C语言版
  11. 什么程度才算精通 Linux?
  12. 0 full gc时cpu idle_结合GC日志讲讲CMS垃圾收集器
  13. java实现归并排序
  14. BIOS int 10H中断介绍
  15. QtXlsx第三方库在Mac OS和Windows下的配置及简单使用
  16. 多米诺骨牌上演:三箭资本崩盘始末
  17. Java中的数据文件
  18. 复杂美区块链技术专利技术之一:交易组解析
  19. 【算法】一文详解贪心法
  20. 大象的三个武器——浅谈印象笔记的“笔记本分类”、“搜索”、“标签”的应用...

热门文章

  1. B/S程序员们,让我们一起来加速IE6的死亡吧! 1
  2. 关于download下载
  3. 中国银联研究院 周雍恺:面向金融的软件定义网络安全探索
  4. CAS的详细登录流程
  5. 在线欺诈检测公司DataVisor获得新融资
  6. ConcurrentMap的putIfAbsent与put的区别
  7. python判断语句的使用
  8. 前端屏幕尺寸和分辨率_web前端开发中常用的尺寸和位置
  9. 在PowerBI中使用R的限制
  10. 途乐行入口页面html代码,途乐行旅游网站