LC 435 Non-overlapping Intervals(M)

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

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

public int eraseOverlapIntervals(Interval[] intervals)

边界条件 如果 intervals 为空,返回0

解题思路

以interval 的 end 进行排序比较, 在排序后的数组中,记录不重叠的 interval, 用总数减去这个值,就是需要去除的个数

public int eraseOverlapIntervals(Interval[] intervals) {
    if (intervals.length == 0)
        return 0;
    Comparator<Interval> interComp = new Comparator<Interval>(){
        public int compare(Interval i1, Interval i2){
            return i1.end - i2.end;
        }
    };
    Arrays.sort(intervals, interComp);

    int end = intervals[0].end;
    int count = 1;
    for(int i = 1; i < intervals.length; i++){
        if(intervals[i].start>=end){
            end = intervals[i].end;
            // non-overlaping count
            count ++;
        }
    }
    // remove interval count
    return intervals.length - count;
}

Last updated

Was this helpful?