百度2012校招笔试题之线段最大重复
题目
算法设计
一个一维数轴上有不同的线段,求重复最长的两个线段。
例: a: 1~3
b: 2~7
c: 2~8
最长重复是b和c
算法设计(伪代码 仅供参考)
typedef struct{ char id; int start; //如果无序 可以先按照start从小到大排序 int end; }Span; char reid1,reid2; void maxspan(Span *sp,int size) //线段有序 { int i,j,maxspan=-1; char id1,id2,tempmin; for(i=0;i<size;i++) { for(j=i+1;(sp+i)->end>(sp+j)->start &&j<size;j++) { if((sp+i)->end<(sp+j)->end) tempmin=(sp+j)->end; else tempmin=(sp+i)->end if((tempmin-(sp+j)->start)>maxspan) { maxspan=(sp+i)->end-(sp+j)->start; id1=(sp+i)->id; id2=(sp+j)->id; } } } reid1=id1; reid2=id2; }