157 求最大重叠区间大小

来源:互联网 发布:ntfs for mac如何用 编辑:程序博客网 时间:2024/05/19 18:44

57、求最大重叠区间大小
题目描述:请编写程序,找出下面“输入数据及格式”中所描述的输入数据文件中最大重叠
区间的大小。对一个正整数  n  ,如果 n 在数据文件中某行的两个正整数(假设为 A 和 B)
之间,即 A<=n<=B 或 A>=n>=B  ,则  n  属于该行;
如果  n  同时属于行 i 和 j  ,则 i 和 j 有重叠区间;重叠区间的大小是同时属于行 i 和 j 的整
数个数。 
例如,行(10 20)和(12 25)的重叠区间为  [12 20]  ,其大小为 9,行(20 10)和(  20 30  )
的重叠区间大小为  1  。 

/*57、求最大重叠区间大小题目描述:请编写程序,找出下面“输入数据及格式”中所描述的输入数据文件中最大重叠区间的大小。对一个正整数  n  ,如果 n 在数据文件中某行的两个正整数(假设为 A 和 B)之间,即 A<=n<=B 或 A>=n>=B  ,则  n  属于该行;如果  n  同时属于行 i 和 j  ,则 i 和 j 有重叠区间;重叠区间的大小是同时属于行 i 和 j 的整数个数。 例如,行(10 20)和(12 25)的重叠区间为  [12 20]  ,其大小为 9,行(20 10)和(  20 30  )的重叠区间大小为1 。是每2行的最大重叠区间,不是所有的 做法: 将输入的区间按起点从小到大排列,然后对每个区间判断从当前区间起点到目前的end的距离,此距离即为覆盖距离,当覆盖距离大于最大的距离时则更新最大距离。每次循环都要判断是否需要更新end,end表示目前所有区间的最大终点值。*/#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;#define N 100struct node{int l,r;};node map[N];bool cmp(node a,node b){return a.l<b.l;}int maxCover(node map[],int n){int i,end,left,right,len,maxLen;sort(map,map+n,cmp);//排序 end=map[0].r;maxLen=-1;//保存最大长度 for(i=1;i<n;i++){left=map[i].l;//左 right=min(map[i].r,end);//右 if(left<=right)len=right-left+1;elselen=0;if(len>maxLen)maxLen=len;if(map[i].r>end)//更新end end=map[i].r;}return maxLen;}int main(){ int n,i,a,b;while(1){printf("请输入行数n(0结束)\n");scanf("%d",&n);if(n==0) break;for(i=0;i<n;i++){scanf("%d%d",&a,&b);if(a<b){map[i].l=a;map[i].r=b;}else{map[i].r=a;map[i].l=b;}}printf("%d\n",maxCover(map,n));} return 0;}/*212 2012 25220 1020 30220 1012 18310 1512 198 130*/


0 0
原创粉丝点击