[leetcode] 435. Non-overlapping Intervals


Description
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.

  • 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: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
    ぶんせき
    多くの区間をあげて、区間を除去した後に残りの区間が重ならないようにして、除去の最小区間の数を求めます.-まずstart順に並べ替えます
  • の判断方法は、前の区間のendが後の区間のstartより大きい場合、必ず重複区間であることを見ることです.この場合、resは1つ増加し、削除する必要があります.では、この場合、私たちはいったいどれを削除すればいいのでしょうか.私たちが全体的に削除した区間の数が最小であることを保証するために、私たちはそのend値の大きい区間を削除します.コードでは、私たちは本当にある区間を削除するのではなく、変数lastで前の比較が必要な区間を指し、lastをend値の小さい区間を指します.2つの区間が重複していない場合、lastは現在の区間を指し、次の遍歴を継続します.

  • コード#コード#
    /**
     * Definition for an interval.
     * struct Interval {
     *     int start;
     *     int end;
     *     Interval() : start(0), end(0) {}
     *     Interval(int s, int e) : start(s), end(e) {}
     * };
     */
    class Solution {
    public:
        int eraseOverlapIntervals(vector& intervals) {
            int res=0;
            int n=intervals.size();
            sort(intervals.begin(),intervals.end(),[](Interval a,Interval b){
                return a.start

    参考文献
    [LeetCode]Non-overlapping Intervals非オーバーラップ区間