LeetCode 435. Non-overlapping Intervals

原题链接在这里:https://leetcode.com/problems/non-overlapping-intervals/

题目:

Given a collection of intervals, find the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.

Example 1:

Input: [[1,2],[2,3],[3,4],[1,3]]
Output: 1
Explanation: [1,3] can be removed and the rest of intervals are non-overlapping.

Example 2:

Input: [[1,2],[1,2],[1,2]]
Output: 2
Explanation: You need to remove two [1,2] to make the rest of intervals non-overlapping.

Example 3:

Input: [[1,2],[2,3]]
Output: 0
Explanation: You don't need to remove any of the intervals since they're already non-overlapping.

Note:

  1. You may assume the interval's end point is always bigger than its start point.
  2. Intervals like [1,2] and [2,3] have borders "touching" but they don't overlap each other.

题解:

Draw with some simple examples and find routine.

Sort based on ending point. Have max initialized as intervals[0] end.

Starting from 2nd, if current interval start is smaller than max, there is overlap, res++.

Otherwise, there is no overlap, we update the maximum.

Time Complexity: O(nlogn). n = intervals.length.

Space: O(1).

AC Java:

 1 class Solution {
 2     public int eraseOverlapIntervals(int[][] intervals) {
 3         if(intervals == null || intervals.length < 2){
 4             return 0;
 5         }
 6         
 7         Arrays.sort(intervals, (a, b) -> a[1] == b[1] ? b[0] - a[0] : a[1] - b[1]);
 8         int max = intervals[0][1];
 9         int res = 0;
10         
11         for(int i = 1; i<intervals.length; i++){
12             if(intervals[i][0] < max){
13                 res++;
14             }else{
15                 max = intervals[i][1];
16             }
17         }
18         
19         return res;
20     }
21 }

类似Minimum Number of Arrows to Burst Balloons.

posted @ 2018-03-02 08:16  Dylan_Java_NYC  阅读(493)  评论(0编辑  收藏  举报