Leetcode 435. Non-overlapping Intervals题解

来源:互联网 发布:人工智能论文2000字 编辑:程序博客网 时间:2024/05/29 15:10

435. Non-overlapping Intervals

 
 My Submissions
  • Total Accepted: 1112
  • Total Submissions: 3007
  • Difficulty: Medium
  • Contributors: love_FDU_llp

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: 1Explanation: [1,3] can be removed and the rest of intervals are non-overlapping.

Example 2:

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

Example 3:

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



解题思路:

本题即为在一个时间段内能安排最大活动数的简单变形。应用贪心的思想,首先将所有的interval按照结束时间排序,然后找到所有时间不重叠的interval。再用interval的总数减去不重叠的interval的数目即可。

代码展示:

/** * Definition for an interval. * struct Interval { *     int start; *     int end; *     Interval() : start(0), end(0) {} *     Interval(int s, int e) : start(s), end(e) {} * }; */ #include <algorithm> using namespace std;class Solution {public:    bool cmp(Interval t1 , Interval t2)    {        return t1.end<t2.end;    }    void mysort(vector<Interval>& intervals,int n)    {        for(int i=0;i<n;i++)        {            Interval m = intervals[i];            int min_index=i;            for(int j=i+1;j<n;j++)            {                if(cmp(intervals[j],intervals[min_index]))                {                    min_index =j;                    m = intervals[j];                }            }            intervals[min_index] = intervals[i];            intervals[i] = m;                    }    }        int eraseOverlapIntervals(vector<Interval>& intervals) {        int n= intervals.size();        if(!n) return 0;        mysort(intervals,n);        int count=1;        int e = intervals[0].end;        for(int i=1;i<n;i++)        {            if(intervals[i].start>=e)            {                count++;                e=intervals[i].end;            }        }        return n-count;    }};


0 0