LeetCode 435 無重疊區間
阿新 • • 發佈:2020-09-09
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; } }