I have a BookingDateRange list where BookingDateRange:
public class BookingDateRange {
private Date fromDate;
private Date toDate;
}
Requirements:
- I need to find if any dates in BookingDate list match, date DateRangeList
- If yes, find all pairs of date ranges that overlap, say List of String says overlappingDatePairs
Example 1 :
Input1:
dateRangeList [0] = Dec 23, 2012 - Dec 27, 2012
dateRangeList [1] = December 14, 2012 - Dec 25, 2012
dateRangeList [2] = 1 jan 2012 - 23 Jan 2012
Output1:
isOverlappingDates = true
overlappingDatePairs = [0_1]
Example 2:
Input2:
dateRangeList [0] = Dec 23, 2012 - Dec 27, 2012
dateRangeList [1] = 1 jan 2012 - 23 Jan 2012
Output2:
isOverlappingDates = false
overlappingDatePairs = []
My decision:
public static boolean isOverlappingDates(
List<BookingDateRange> dateRangeList,
List<String> overlappingDatePairs) {
boolean isOverlap = false;
for (int index1 = 0; index1 < dateRangeList.size(); index1++) {
for (int index2 = index1 + 1; index2 < dateRangeList.size(); index2++) {
Date startA = dateRangeList.get(index1).getFromDate();
Date endA = dateRangeList.get(index1).getToDate();
Date startB = dateRangeList.get(index2).getFromDate();
Date endB = dateRangeList.get(index2).getToDate();
boolean isStartABeforeEndB = (startA.compareTo(endB)) < 0;
boolean isEndAAfterStartB = (endA.compareTo(startB)) > 0;
boolean isCurrentPairOverlap = false;
isCurrentPairOverlap = isStartABeforeEndB && isEndAAfterStartB;
if (isCurrentPairOverlap) {
overlappingDatePairs.add(index1 + "_" + index2);
isOverlap = true;
}
}
}
return isOverlap;
}
O (n ^ 2). ? .
SO. .
,
Shikha