LeetCode 1353. 最多可以参加的会议数目(排序+贪心,优先队列,难)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                LeetCode 1353. 最多可以参加的会议数目(排序+贪心,优先队列,难)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                文章目錄
- 1. 題目
- 2. 解題
- 2.1 錯(cuò)誤解
- 2.2 超時(shí)解
- 2.3 通過解
- 2.4 大佬解
 
 
1. 題目
給你一個(gè)數(shù)組 events,其中 events[i] = [startDayi, endDayi] ,表示會(huì)議 i 開始于 startDayi ,結(jié)束于 endDayi 。
你可以在滿足 startDayi <= d <= endDayi 中的任意一天 d 參加會(huì)議 i 。注意,一天只能參加一個(gè)會(huì)議。
請(qǐng)你返回你可以參加的 最大 會(huì)議數(shù)目。
 
來(lái)源:力扣(LeetCode)
 鏈接:https://leetcode-cn.com/problems/maximum-number-of-events-that-can-be-attended
 著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
2.1 錯(cuò)誤解
- 先按會(huì)議的start排序,相同的話按照end排序
 根據(jù)出錯(cuò)的例子,可知上面算法有缺陷:
 正確的應(yīng)該是:
- 對(duì)當(dāng)前會(huì)議i,還需要往下找到j(luò),j 被包含在i的區(qū)間內(nèi)
- 如果attendTime與區(qū)間j有交點(diǎn),優(yōu)先先參加j
 
2.2 超時(shí)解
class Solution {//超時(shí)代碼 public:int maxEvents(vector<vector<int>>& events) {sort(events.begin(), events.end(),[](vector<int>& a, vector<int>& b){if(a[0] == b[0])return a[1] < b[1];return a[0] < b[0];});int i, j, count = 0, attendTime = 0;for(i = 0; i < events.size(); ++i){if(attendTime < events[i][0]){attendTime = events[i][0];count++;attendTime++;}else if(attendTime <= events[i][1]){for(j = i+1; j < events.size() && events[i][1] <= events[j][1]; ++j);if(j < events.size() && attendTime >= events[j][0]){count++;events.erase(events.begin()+j);attendTime++;i--;continue;}count++;attendTime++;}}return count;} };不幸的是:最后一個(gè)例子超時(shí)
 
2.3 通過解
優(yōu)化
- 當(dāng)attendTime與events[j]沒有交點(diǎn)時(shí),提前break
2.4 大佬解
大佬的思路
- 按照會(huì)議start對(duì) events 升序排序
- 按日期time進(jìn)行掃描
- 將time時(shí)開始的會(huì)議都加入到優(yōu)先隊(duì)列(隊(duì)列存儲(chǔ)的是會(huì)議結(jié)束end時(shí)間)
- 優(yōu)先隊(duì)列(小頂堆)把結(jié)束日期早的先出隊(duì),參加該會(huì)議
- time++,新的一天,先把優(yōu)先隊(duì)列里已經(jīng)過期的會(huì)議刪除
總結(jié)
以上是生活随笔為你收集整理的LeetCode 1353. 最多可以参加的会议数目(排序+贪心,优先队列,难)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: LeetCode 594. 最长和谐子序
- 下一篇: LeetCode 646. 最长数对链(
