Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Intersection(List<TimeRange> timeRanges) {
- timeRanges.forEach(timeRange -> {
- timePairs.add(new Pair(timeRange.getTimeStart(), -1));
- timePairs.add(new Pair((timeRange.getTimeStart() + timeRange.getTimeEnd()) / 2, 0));
- timePairs.add(new Pair(timeRange.getTimeEnd(), +1));
- });
- M = timePairs.size() / 3;
- timePairs = timePairs.stream().sorted((Pair::compareTo)).collect(Collectors.toList());
- }
- @Override
- public TimeRange getResult() {
- int midcount, endcount;
- double lower = 0, upper = 0;
- // f = 0 assuming all input intervals are valid
- for (f = 0; f < M/2; f++) {
- midcount = 0;
- endcount = 0;
- // find lower endpoint
- for (int i = 0; i < timePairs.size(); i++) {
- endcount -= timePairs.get(i).getType();
- lower = timePairs.get(i).getOffset();
- if (endcount >= (M - f)) { break; }
- if (timePairs.get(i).getType() == 0) {midcount = midcount + 1; }
- }
- endcount = 0;
- // find upper endpoint
- for (int i = timePairs.size() - 1; i >= 0; i--) {
- endcount += timePairs.get(i).getType();
- upper = timePairs.get(i).getOffset();
- if (endcount >= (M - f)) { break; }
- if (timePairs.get(i).getType() == 0) { midcount++; }
- }
- endcount = 0;
- if (midcount <= f) { break; }
- }
- if (lower <= upper) {
- result.setTime(lower, upper);
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement