主页 > 互联网  > 

【晴问算法】入门篇—贪心算法—区间不相交问题

【晴问算法】入门篇—贪心算法—区间不相交问题

题目描述

给定n个开区间,从中选择尽可能多的开区间,使得这些开区间两两没有交集。

输入描述

输出描述

输出一个整数,表示最多选择的开区间个数。

样例1输入

4 1 3 2 4 3 5 6 7

输出

3

解释

最多选择(1,3)、(3,5)、(6,7)三个区间,它们互相没有交集。

#include<bits/stdc++.h> using namespace std; const int MAXN = 100; int a[MAXN]; struct qj{ int x;//左端点 int y;//右端点 };//定义区间结构体,依次输入区间的左右端点 bool cmp(qj a, qj b){//qj类型的a和b return a.y < b.y;//返回右端点较小的区间 } int main(){ struct qj a[MAXN]; int n; cin >> n; for(int i=0;i<n;i++){ scanf("%d %d",&a[i].x,&a[i].y); } sort(a,a+n,cmp);//按照右端点小的顺序 int last = a[0].y;//第一个区间的左端点 int count = 1;//第一个区间一定能被选中 for(int i=1;i<n;i++){//从第二个区间开始判断 if(a[i].x >= last){//如果当前区间的左端点大于等于上一个区间的右端点 count++;//则不会交集,个数加1 last = a[i].y;//更新当前的右端点 } } printf("%d",count); return 0; }

标签:

【晴问算法】入门篇—贪心算法—区间不相交问题由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【晴问算法】入门篇—贪心算法—区间不相交问题