1. 程式人生 > >面試:解決重點問題,計算兩個時間段是否有交集的演算法及其應用例項

面試:解決重點問題,計算兩個時間段是否有交集的演算法及其應用例項

1、通過 if 判斷語句進行判斷,if(endTime1 > startTime2 && endTime2 > startTime1) 那麼這兩個時間段有交集,一個時間段的結束時間大於另一個時間段的開始時間,如果成立那麼兩個時間段有交集。

應用:

業務:某一個系統需要安排會展,要求任意時間段最多安排6家會展

步驟:1、插入資料時,首先從資料庫篩選與所插入資料有交集的時間段;2、遍歷該時間段的元素,取與插入資料的交集,結果依次與後面資料取交集,如果有交集則計數1,如果數量大於5則不能插入,遍歷完畢如果所有的都不大於5那麼可以插入

程式碼:

public static boolean verifyRepetition(List<List<String>> timess, List<String> insertTimes){
    //插入時間開始時間
    String insertOneStr = insertTimes.get(0);
    long insertOne = Long.parseLong(insertOneStr);

    //插入時間結束時間
    String insertTwoStr = insertTimes.get(1);
    long insertTwo = Long.parseLong(insertTwoStr);

    //計數
    int count = 0;

    for (List<String> times : timess) {
        //遍歷時間的開始時間
        String timeOneStr = times.get(0);
        long timeOneOri = Long.parseLong(timeOneStr);

        //遍歷時間結束時間
        String timeTwoStr = times.get(1);
        long timeTowOri = Long.parseLong(timeTwoStr);

        //遍歷時間和插入時間的交集開始時間
        long timeOne = timeOneOri>insertOne?timeOneOri:insertOne;
        //遍歷時間和插入時間的交集結束時間
        long timeTwo = timeTowOri>insertTwo?insertTwo:timeTowOri;

        for (List<String> times1 : timess) {
            String timeOneStr1 = times1.get(0);
            long timeOne1 = Long.parseLong(timeOneStr1);

            String timeTwoStr1 = times1.get(1);
            long timeTwo1 = Long.parseLong(timeTwoStr1);

            //有交集計數加1
            if (timeTwo > timeOne1 && timeTwo1 > timeOne){
                count ++;
            }
            if (count > 5){
                return false;
            }
        }
        count = 0;
    }
    return true;
}