Find number range intersection

Just a pseudo code guess:

Set<Range> determineIntersectedRanges(Range range, Set<Range> setofRangesToTest)
{
  Set<Range> results;
  foreach (rangeToTest in setofRangesToTest)
  do
    if (rangeToTest.end <range.start) continue; // skip this one, its below our range
    if (rangeToTest.start >range.end) continue; // skip this one, its above our range
    results.add(rangeToTest);
  done
  return results;
}

I would make a Range class and give it a method boolean intersects(Range) . Then you can do a

foreach(Range r : rangeset) { if (range.intersects(r)) res.add(r) }

or, if you use some Java 8 style functional programming for clarity:

rangeset.stream().filter(range::intersects).collect(Collectors.toSet())

The intersection itself is something like

this.start <= other.end && this.end >= other.start

Tags:

Math