leet_435_non_overlap_intervals(删除几个区间后各区间不重叠)

  • leetcode:地址

  • 问题描述:给定一个区间集合,尝试删除最少数量的区间使得所有区间不重合,求最小区间数。

  • 输入输出样例:

    • 输入:[ [1,2], [2,3], [3,4], [1,3] ]
    • 输出:1
    • 解释:删除一个区间[1,3]后所有区间均不重合。
  • 分析:贪心算法(局部最优 到全局最优)

  • c++代码

    • 注意:代码中用到c++11标准中的匿名函数,关于匿名函数详细可以查看
 struct Interval {
     int start;
     int end;
     Interval() : start(0), end(0) {}
     Interval(int s, int e) : start(s), end(e) {}
 };
 
class Solution {
public:
	int non_overlap_intervals(vector<Interval>& intervals)
	{
		auto comp = [](const Interval& interval_1, const Interval& interval_2) {return interval_1.start < interval_2.start; };
		sort(intervals.begin(), intervals.end(), comp);

		int res = 0, pre = 0;
		for (int i = 1; i < intervals.size(); i++)
		{
			if (intervals[i].start < intervals[pre].end)
			{
				res++;
				if (intervals[i].end < intervals[pre].end)
					pre = i;
			}
			else
				pre++;
		}
		return res;
	}
};

主调函数:

#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;

int main(int argc, char* argv[])
{
	vector<Interval> intervals = {Interval(1, 2),Interval(2, 3), Interval(3,4), Interval(1, 3)};
	Solution solution;
	cout<< "Need Remove  " <<solution.non_overlap_intervals(intervals) << "  intervals"<<endl;
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值