贪心:435. 无重叠区间

题目:

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。

来源:leetcode

分析:

题目换一种说法,找最多的不重叠区间,即最经典的贪心问题。
贪心策略:最早结束,给剩余的留尽可能多的空间。
–>受戳爆气球问题的启发:相同终点的选哪个有影响吗?
答:显然没有,因为考虑下一个的时候和考虑第一个时一样,只是为了给后面的留更多的空间。

代码:

class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& inter) {
        if(inter.size()==0) return 0;
        sort(inter,0,inter.size()-1);
        int end=inter[0][1];
        int num=1;
                for(int i=0;i<inter.size();i++)
        {
         if(end<=inter[i][0]){
          num++;
          end=inter[i][1];
   }
  }
        return inter.size()-num;
    }
   void sort(vector<vector<int>>& a,int left, int right)
{//a[i][j]   对i个进行排序,按照a【x】的第一个     (最早结束) 
    if(left >= right) return;
    int i = left;
    int j = right;
    int key = a[left][1];
    int key0 =a[left][0];
    while(i < j)                               
    {
        while(i < j && key <= a[j][1]) j--;
        a[i][0]=a[j][0];
        a[i][1]=a[j][1];
        while(i < j && key >= a[i][1]) i++;
        a[j][0] = a[i][0];
        a[j][1] = a[i][1];
    }
    a[i][1] = key;
    a[i][0]=key0;
    sort(a,left, i - 1);
    sort(a,i + 1, right);
}
};
发布了48 篇原创文章 · 获赞 20 · 访问量 617

猜你喜欢

转载自blog.csdn.net/weixin_42721412/article/details/103266048