|
1 | 1 | package com.fishercoder.solutions;
|
2 | 2 |
|
3 |
| -import com.fishercoder.common.classes.Interval; |
4 |
| - |
5 |
| -import java.util.Arrays; |
6 |
| -import java.util.Collections; |
7 |
| -import java.util.HashMap; |
8 |
| -import java.util.Map; |
| 3 | +import java.util.TreeMap; |
9 | 4 |
|
10 | 5 | public class _436 {
|
11 | 6 |
|
12 | 7 | public static class Solution1 {
|
13 |
| - public int[] findRightInterval(Interval[] intervals) { |
14 |
| - if (intervals == null || intervals.length == 0) { |
15 |
| - return new int[0]; |
16 |
| - } |
17 |
| - int[] result = new int[intervals.length]; |
18 |
| - result[0] = -1; |
19 |
| - Interval last = intervals[intervals.length - 1]; |
20 |
| - Interval first = intervals[0]; |
21 |
| - Map<Interval, Integer> map = new HashMap(); |
| 8 | + public int[] findRightInterval(int[][] intervals) { |
| 9 | + TreeMap<Integer, Integer> map = new TreeMap<>(); |
| 10 | + int[] res = new int[intervals.length]; |
22 | 11 | for (int i = 0; i < intervals.length; i++) {
|
23 |
| - map.put(intervals[i], i); |
24 |
| - } |
25 |
| - |
26 |
| - Collections.sort(Arrays.asList(intervals), (o1, o2) -> o1.start - o2.start); |
27 |
| - |
28 |
| - for (int i = 1; i < intervals.length; i++) { |
29 |
| - //TODO: use binary search for the minimum start interval for interval[i-1] instead of a while loop |
30 |
| - int tmp = i - 1; |
31 |
| - int tmpI = i; |
32 |
| - while (tmpI < intervals.length && intervals[tmpI].start < intervals[tmp].end) { |
33 |
| - tmpI++; |
34 |
| - } |
35 |
| - if (tmpI < intervals.length) { |
36 |
| - result[map.get(intervals[tmp])] = map.get(intervals[tmpI]); |
37 |
| - } else { |
38 |
| - result[map.get(intervals[tmp])] = -1; |
39 |
| - } |
| 12 | + map.put(intervals[i][0], i); |
40 | 13 | }
|
41 |
| - if (result[intervals.length - 1] == 0 && last.end > first.start) { |
42 |
| - result[intervals.length - 1] = -1; |
| 14 | + for (int i = 0; i < intervals.length; i++) { |
| 15 | + Integer key = map.ceilingKey(intervals[i][intervals[i].length - 1]); |
| 16 | + res[i] = key != null ? map.get(key) : -1; |
43 | 17 | }
|
44 |
| - return result; |
| 18 | + return res; |
45 | 19 | }
|
46 | 20 | }
|
47 | 21 |
|
|
0 commit comments