LeetCode #1353 Maximum Number of Events That Can Be Attended 最多可以參加的會議數(shù)目

1353 Maximum Number of Events That Can Be Attended 最多可以參加的會議數(shù)目

Description:

You are given an array of events where events[i] = [startDayi, endDayi]. Every event i starts at startDayi and ends at endDayi.

You can attend an event i at any day d where startTimei <= d <= endTimei. You can only attend one event at any time d.

Return the maximum number of events you can attend.

Example:

Example 1:

[圖片上傳失敗...(image-644eea-1666361299596)]

Input: events = [[1,2],[2,3],[3,4]]
Output: 3
Explanation: You can attend all the three events.
One way to attend them all is as shown.
Attend the first event on day 1.
Attend the second event on day 2.
Attend the third event on day 3.

Example 2:

Input: events= [[1,2],[2,3],[3,4],[1,2]]
Output: 4

Constraints:

1 <= events.length <= 10^5
events[i].length == 2
1 <= startDayi <= endDayi <= 10^5

題目描述:

給你一個(gè)數(shù)組 events亿乳,其中 events[i] = [startDayi, endDayi] 薄啥,表示會議 i 開始于 startDayi 讼昆,結(jié)束于 endDayi 。

你可以在滿足 startDayi <= d <= endDayi 中的任意一天 d 參加會議 i 脖含。注意比规,一天只能參加一個(gè)會議守屉。

請你返回你可以參加的 最大 會議數(shù)目。

示例:

示例 1:

[圖片上傳失敗...(image-6813c5-1666361299597)]

輸入:events = [[1,2],[2,3],[3,4]]
輸出:3
解釋:你可以參加所有的三個(gè)會議夷野。
安排會議的一種方案如上圖懊蒸。
第 1 天參加第一個(gè)會議。
第 2 天參加第二個(gè)會議悯搔。
第 3 天參加第三個(gè)會議骑丸。

示例 2:

輸入:events= [[1,2],[2,3],[3,4],[1,2]]
輸出:4

提示:

1 <= events.length <= 10^5
events[i].length == 2
1 <= startDayi <= endDayi <= 10^5

思路:

掃描線 ? 優(yōu)先隊(duì)列
按照開始時(shí)間將對應(yīng)下標(biāo)加入
對于每個(gè)開始時(shí)間將對應(yīng)結(jié)束時(shí)間加入小根堆
將所有不合法的結(jié)束時(shí)間都彈出, 然后如果小根堆不為空, 彈出一個(gè)時(shí)間, 該會議可以參加
時(shí)間復(fù)雜度為 O(slgn), 空間復(fù)雜度為 O(s), 其中 s 表示最大的結(jié)束時(shí)間

代碼:

C++:

class Solution 
{
public:
    int maxEvents(vector<vector<int>>& events) 
    {
        vector<vector<int>> starts(100010);
        int result = 0, n = events.size();
        for (int i = 0; i < n; i++) starts[events[i].front()].emplace_back(i);
        priority_queue<int> pq;
        for (int i = 1; i < 100010; i++) 
        {
            for (int j : starts[i]) pq.push(-events[j].back());
            while (!pq.empty() and -pq.top() < i) pq.pop();
            if (!pq.empty()) 
            {
                pq.pop();
                ++result;
            }
        }
        return result;
    }
};

Java:

class Solution {
    public int maxEvents(int[][] events) {
        List<List<Integer>> starts = new ArrayList<>(100010);
        int m = 0, result = 0, n = events.length;
        for (int i = 0; i < n; i++) m = Math.max(m, events[i][1]);
        for (int i = 0; i <= m; i++) starts.add(new ArrayList<>());
        for (int i = 0; i < n; i++) starts.get(events[i][0]).add(i);
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for (int i = 1; i <= m; i++) {
            for (int j : starts.get(i)) pq.offer(events[j][1]);
            while (!pq.isEmpty() && pq.peek() < i) pq.poll();
            if (!pq.isEmpty()) {
                pq.poll();
                ++result;
            }
        }
        return result;
    }
}

Python:

class Solution:
    def maxEvents(self, events: List[List[int]]) -> int:
        n, starts, heap, result, m = len(events), defaultdict(list), [], 0, max(e for s, e in events)
        for i in range(n):
            starts[events[i][0]].append(i)
        for i in range(1, m + 1):
            for j in starts[i]:
                heappush(heap, events[j][1])
            while heap and heap[0] < i:
                heappop(heap)
            if heap:
                heappop(heap)
                result += 1
        return result
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市妒貌,隨后出現(xiàn)的幾起案子通危,更是在濱河造成了極大的恐慌,老刑警劉巖苏揣,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黄鳍,死亡現(xiàn)場離奇詭異,居然都是意外死亡平匈,警方通過查閱死者的電腦和手機(jī)框沟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門藏古,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忍燥,你說我怎么就攤上這事拧晕。” “怎么了梅垄?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵厂捞,是天一觀的道長。 經(jīng)常有香客問我队丝,道長靡馁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任机久,我火速辦了婚禮臭墨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膘盖。我一直安慰自己胧弛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布侠畔。 她就那樣靜靜地躺著结缚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪软棺。 梳的紋絲不亂的頭發(fā)上红竭,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音码党,去河邊找鬼德崭。 笑死斥黑,一個(gè)胖子當(dāng)著我的面吹牛揖盘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锌奴,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兽狭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鹿蜀?” 一聲冷哼從身側(cè)響起箕慧,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茴恰,沒想到半個(gè)月后颠焦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡往枣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年伐庭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粉渠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡圾另,死狀恐怖霸株,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情集乔,我是刑警寧澤去件,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站扰路,受9級特大地震影響尤溜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汗唱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一靴跛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渡嚣,春花似錦梢睛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腹鹉,卻和暖如春藏畅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背功咒。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工愉阎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人力奋。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓榜旦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親景殷。 傳聞我的和親對象是個(gè)殘疾皇子溅呢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容