Skip to content

Commit 38c6fa2

Browse files
committed
Modified Find Right Interval.java
1 parent d497e73 commit 38c6fa2

File tree

1 file changed

+16
-39
lines changed

1 file changed

+16
-39
lines changed

Medium/Find Right Interval.java

Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,19 @@
1-
/**
2-
* Definition for an interval.
3-
* public class Interval {
4-
* int start;
5-
* int end;
6-
* Interval() { start = 0; end = 0; }
7-
* Interval(int s, int e) { start = s; end = e; }
8-
* }
9-
*/
101
class Solution {
11-
public int[] findRightInterval(Interval[] intervals) {
12-
int n = intervals.length;
13-
if (n == 1) {
14-
return new int[]{-1};
15-
}
16-
17-
int[] start = new int[n];
18-
Map<Integer, Integer> map = new HashMap<>();
19-
for (int i=0; i<intervals.length; i++) {
20-
start[i] = intervals[i].start;
21-
map.put(intervals[i].start, i);
22-
}
23-
24-
Arrays.sort(start);
25-
int[] ans = new int[intervals.length];
26-
for (int i=0; i<n; i++) {
27-
int end = intervals[i].end;
28-
int x = Arrays.binarySearch(start, end);
29-
if (x > 0) {
30-
ans[i] = map.get(end);
31-
}
32-
else if (-x > n) {
33-
ans[i] = -1;
34-
}
35-
else {
36-
ans[i] = map.get(start[-x-1]);
37-
}
38-
}
39-
40-
return ans;
2+
public int[] findRightInterval(int[][] intervals) {
3+
TreeMap<Integer, PriorityQueue<Integer>> map = new TreeMap<>();
4+
for (int i = 0; i < intervals.length; i++) {
5+
map.computeIfAbsent(intervals[i][0], k -> new PriorityQueue<>(
6+
Comparator.comparingInt(o -> intervals[o][0]))
7+
).add(i);
418
}
9+
int[] ans = new int[intervals.length];
10+
Arrays.fill(ans, -1);
11+
for (int i = 0; i < intervals.length; i++) {
12+
Integer upper = map.ceilingKey(intervals[i][1]);
13+
if (upper != null) {
14+
ans[i] = map.get(upper).peek();
15+
}
16+
}
17+
return ans;
18+
}
4219
}

0 commit comments

Comments
 (0)