Вот небольшой тестовый пример:
package playground.tests;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import playground.Range;
public class NonoverlappingRangeListsTest extends TestCase {
public void testOverlap() throws Exception {
assertFalse(new Range(0, 5).overlaps(new Range(6, 7)));
assertTrue(new Range(0, 5).overlaps(new Range(3, 7)));
assertTrue(new Range(0, 5).overlaps(new Range(7, 3)));
assertTrue(new Range(0, 5).overlaps(new Range(-1, 0)));
assertTrue(new Range(0, 5).overlaps(new Range(5, 6)));
assertTrue(new Range(0, 5).overlaps(new Range(2, 3)));
}
public void testIsNonoverlappingList() throws Exception {
List<Range> list = new ArrayList<Range>();
assertTrue(Range.isNonoverlapping(list));
list.add(new Range(0, 5));
list.add(new Range(6, 7));
assertTrue(Range.isNonoverlapping(list));
list.add(new Range(2, 3));
assertFalse(Range.isNonoverlapping(list));
}
}
И класс, который проходит тест:
package playground;
import java.util.List;
public class Range {
private final int from;
private final int to;
public Range(int from, int to) {
this.from = Math.min(from, to);
this.to = Math.max(from, to);
}
public boolean overlaps(Range that) {
return this.from <= that.to && that.from <= this.to;
}
public static boolean isNonoverlapping(List<Range> ranges) {
for (int i = 0; i < ranges.size(); i++)
for (int j = i + 1; j < ranges.size(); j++)
if (ranges.get(i).overlaps(ranges.get(j)))
return false;
return true;
}
}