I would write the following algorithm:
bool Overlap(int s, int e, int s1, int e1) { if(s > s1 && s < e1) return true; if(s1 > s && s1 < e) return true; return false; } int[] overlaps(Range[] ranges) { List<int> res = new List<int>(); foreach(Range r in ranges) { foreach(Range rr in ranges) { if(Overlap(r.start, r.end, rr.start, rr.end)) res.add(r.start); } } return res.ToArray(); }
source share