leetcode253——會議室 II——java實現

燭承幻發表於2019-08-13

題目要求:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190831110311663.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjQ1NjM2,size_16,color_FFFFFF,t_70在這裡插入圖片描述
分析:
為了一道題目,開了一個會員,寫了一個效能垃圾但是能通過的程式碼。
我這水平好像也只能寫出這樣的程式碼了,也懶得看別人的了。

  • 首先分別設定兩個陣列start和end,用來存放開始時間和結束時間;
  • 然後再對start陣列和end陣列進行排序。由於我們這裡都是從小到大排即可,所以不需要重寫compare方法,直接用sort()即可;
  • 設定一個優先佇列(最小堆),用來存放結束時間;
  • 如果後一個的開始時間比結束時間要晚,就說明可以放在同一個會議室開會,我們就把堆頂的元素給poll出來,再將現在這個結束時間放進去,否則說明需要開闢新的會議室,不用poll當前堆頂的元素,直接把現在這個結束時間放進去;
  • 遍歷結束之後,堆的大小就是所需會議室的數目。

具體程式碼如下:

class Solution {
    public int minMeetingRooms(int[][] intervals) {
        if(intervals == null || intervals.length == 0)
            return 0;
        int[] start = new int[intervals.length];
        int[] end = new int [intervals.length];
        for(int i = 0; i < intervals.length; i ++) {
            start[i] = intervals[i][0];
            System.out.println(start[i]);
            end[i] = intervals[i][1];
        }
        Arrays.sort(start);
        Arrays.sort(end);
        PriorityQueue<Integer> pq = new PriorityQueue<>(end.length);
        pq.add(end[0]);
        for(int i = 1; i < end.length; i ++) {
            if(start[i] >= pq.peek())
                pq.poll();
            pq.add(end[i]);
        }
        return pq.size();
    }
}

相關文章