LeetCode 435 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.

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.

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.

题目链接:https://leetcode.com/problems/non-overlapping-intervals/description/

题目分析:先用贪心求最大的不重合区间个数(按end排序,扫一遍),再一减即可 (击败70%)

/**
 * Definition for an interval.
 * public class Interval {
 *     int start;
 *     int end;
 *     Interval() { start = 0; end = 0; }
 *     Interval(int s, int e) { start = s; end = e; }
 * }
 */
class Solution {
    
    public int eraseOverlapIntervals(Interval[] intervals) {
        int n = intervals.length;
        if (n == 0) {
            return 0;
        }
        Comparator <Interval> cmp = new Comparator<Interval>() {
            public int compare(Interval i1, Interval i2) {
                if (i1.end > i2.end) {
                    return 1;
                } else if (i1.end < i2.end) {
                    return -1;
                } else {
                    if (i1.start > i2.start) {
                        return 1;
                    } else if (i1.start < i2.start) {
                        return -1;
                    } else {
                        return 0;
                    }
                }
            }
        };
        Arrays.sort(intervals, cmp);
        int maxSeg = 1, cur = intervals[0].end, i = 1;
        while (i < n) {
            while (i < n && intervals[i].start < cur) {
                i++;
            }
            if (i < n) {
                cur = intervals[i].end;
                maxSeg++;
            }
            i++;
        }
        return n - maxSeg;
    }
}

猜你喜欢

转载自blog.csdn.net/Tc_To_Top/article/details/79577012
今日推荐