[LeetCode] Find Right Interval (Java)
https://leetcode.com/problems/find-right-interval/description/
입력 : int[][] intervals - [start, end]로 구성된 하나의 구간(Interval)을 나타냄
출력 : 각 구간에 대해 해당 구간의 끝점보다 크거나 같은 시작점을 가진 가장 작은 구간의 인덱스 반환. 없으면 -1 반환
O(n log n)
이진탐색
구현
import java.util.*;
class Solution {
public int[] findRightInterval(int[][] intervals) {
int n = intervals.length;
int[] result = new int[n];
TreeMap<Integer, Integer> map = new TreeMap<>();
// Intervals의 시작점을 TreeMap에 저장, key는 시작점, value는 인덱스
for (int i = 0; i < n; i++) {
map.put(intervals[i][0], i);
}
// 각 interval에 대해 right interval 찾기
for (int i = 0; i < n; i++) {
Integer key = map.ceilingKey(intervals[i][1]);
result[i] = key == null ? -1 : map.get(key);
}
return result;
}
}