range:
min
max
// pre-condition: ranges are sorted and are not overlapping
// O(logn)
range find(x, ranges):
if ranges == null:
throw
if ranges.isEmpty():
return nullRange
return findInner(x, ranges)
// O(nlogn)
sort(ranges):
ranges = ranges.sort(x => x.min)
// ranges need to be sorted
// O(n)
validate(ranges):
if ranges.isEmpty():
return
prevRange = ranges[0]
for i = 1, i < ranges.count(), i++:
range = ranges[i]
if !(prevRange.max < range.min):
throw
prevRange = range
// O(logn)
findInner(x, ranges):
start = 0
end = ranges.count() -1
while start <= end:
mid = start + (end-start)/2
range = ranges[mid]
if x < range.min:
end = mid -1
else if x > range.max:
start = mid +1
else:
return range
return nullRange
Saturday, December 14, 2019
find x in non-overlapping ranges
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment