Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. public Intersection(List<TimeRange> timeRanges) {
  2. timeRanges.forEach(timeRange -> {
  3. timePairs.add(new Pair(timeRange.getTimeStart(), -1));
  4. timePairs.add(new Pair((timeRange.getTimeStart() + timeRange.getTimeEnd()) / 2, 0));
  5. timePairs.add(new Pair(timeRange.getTimeEnd(), +1));
  6. });
  7. M = timePairs.size() / 3;
  8. timePairs = timePairs.stream().sorted((Pair::compareTo)).collect(Collectors.toList());
  9. }
  10.  
  11. @Override
  12. public TimeRange getResult() {
  13. int midcount, endcount;
  14. double lower = 0, upper = 0;
  15.  
  16. // f = 0 assuming all input intervals are valid
  17. for (f = 0; f < M/2; f++) {
  18. midcount = 0;
  19. endcount = 0;
  20.  
  21. // find lower endpoint
  22. for (int i = 0; i < timePairs.size(); i++) {
  23. endcount -= timePairs.get(i).getType();
  24. lower = timePairs.get(i).getOffset();
  25.  
  26. if (endcount >= (M - f)) { break; }
  27. if (timePairs.get(i).getType() == 0) {midcount = midcount + 1; }
  28. }
  29. endcount = 0;
  30.  
  31. // find upper endpoint
  32. for (int i = timePairs.size() - 1; i >= 0; i--) {
  33. endcount += timePairs.get(i).getType();
  34. upper = timePairs.get(i).getOffset();
  35.  
  36. if (endcount >= (M - f)) { break; }
  37. if (timePairs.get(i).getType() == 0) { midcount++; }
  38. }
  39. endcount = 0;
  40.  
  41. if (midcount <= f) { break; }
  42. }
  43.  
  44. if (lower <= upper) {
  45. result.setTime(lower, upper);
  46. }
  47.  
  48. return result;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement