先声明此题没用到数据库,所以不要回答说用数据库来搞!有n个文件,每个文件中有条记录包含一个个开始时间和一个结束时间。时间格式为YYYY-MM-DD **:**:**问题是:如何找出这N个文件中时间相互重叠(交叉)的中持续时间最长的那条记录?
比如说2006-12-03 20:50:30(开始时间)   20:51:55(结束时间)
和2006-12-03  20:51:05   20:53:30时间有交叉,且第二条记录的持续时间长,所以选择第二条记录.注:可以有多条记录时间交叉。

解决方案 »

  1.   

    首先,你的文件中的开始时间是否是升序排列的,如果是,就会方便很多.
    先用一个变量(a)指向第一条记录,另一个变量依次(b)往下, 判断当前记录是否和下一条有交叉,如果有,判断持续时间,将长的记录赋给变量(i),直到b不和a有交叉了.a++,b=a+1,循环,直到文件完,即可知道i中就是要找的那一条.
      

  2.   

    to 楼上的:
    问题是这N条记录并不是一定按升序或降序排列的。
    PS:题目是有N个文件,每个文件中有一条记录。当然你要把它看成是一个文件中有N条记录也行,但是就要注意它们不是按序排列的
      

  3.   

    private bool JudgeTime(string starttime1,string startlong1,string starttime2,string startlong2)
    {
    DateTime stime1=Convert.ToDateTime(starttime1);
    DateTime etime1=stime1.AddSeconds(Convert.ToDouble(startlong1.Trim())); DateTime stime2=Convert.ToDateTime(starttime2.Trim());
    DateTime etime2=stime2.AddSeconds(Convert.ToDouble(startlong2.Trim())); if(stime1.CompareTo(etime2)<=0 && stime2.CompareTo(etime1)<=0)
    {
    return true;
    }
    return false;
    }