1. 程式人生 > 實用技巧 >LeetCode 435 無重疊區間

LeetCode 435 無重疊區間

LeetCode 435 無重疊區間

問題描述:
給定一個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。
注意:

  • 可以認為區間的終點總是大於它的起點。
  • 區間 [1,2] 和 [2,3] 的邊界相互“接觸”,但沒有相互重疊。

貪心思想

執行用時:5 ms, 在所有 Java 提交中擊敗了35.16%的使用者
記憶體消耗:40 MB, 在所有 Java 提交中擊敗了20.16%的使用者

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        if(intervals==null || intervals.length==0 || intervals[0].length==0 || intervals.length==1) {
            return 0;
        }
        /*按照區間右邊界升序排序*/
        Arrays.sort(intervals, new Comparator<int[]>(){
            public int compare(int[] o1, int[] o2) {
                return o1[1] - o2[1];
            }
        });
        /*貪心思想:對於每次選擇,總是保證能夠獲得最大不重疊區間數量*/
        int curr = 0, next = 1;
        int count = 0;
        while(next<intervals.length) {
            /*下一區間next 與 當前區間curr 或 當前區間之前區間 重疊,而 當前區間及之前區間 均不重疊*/
            /*因此要獲得最大不重疊區間數量,則需要將下一區間next去除(結果count+1)*/
            if(intervals[next][0]<intervals[curr][1]) {
                count++;
            }
            else {
                curr = next;
            }
            next++;
        }
        return count;
    }
}