面試:解決重點問題,計算兩個時間段是否有交集的演算法及其應用例項
阿新 • • 發佈:2018-12-12
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; }