Find Right Interval
Thoughts
Code
/**
* Definition for an interval.
* public class Interval {
* int start;
* int end;
* Interval() { start = 0; end = 0; }
* Interval(int s, int e) { start = s; end = e; }
* }
*/
class Solution {
private int binSearch(Interval[] intervals, int target) {
int start = 0, end = intervals.length - 1;
while (start < end) {
int mid = start + (end - start) / 2;
if (intervals[mid].start < target) {
start = mid + 1;
} else {
end = mid;
}
}
if (intervals[start].start >= target) {
return start;
}
return -1;
}
public int[] findRightInterval(Interval[] intervals) {
Map<Interval, Integer> locs = new HashMap<>();
Interval[] tmp = new Interval[intervals.length];
for (int i = 0; i < intervals.length; i++) {
locs.put(intervals[i], i);
tmp[i] = intervals[i];
}
Arrays.sort(tmp, (a, b) -> a.start == b.start ? a.end - b.end : a.start - b.start);
int[] res = new int[intervals.length];
for (int i = 0; i < intervals.length; i++) {
int tpos = binSearch(tmp, intervals[i].end);
if (tpos != -1) {
res[i] = locs.get(tmp[tpos]);
} else {
res[i] = -1;
}
}
return res;
}
}Analysis
Last updated