本文共 1553 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要找到每个区间右边的区间,即起始点大于或等于当前区间的终点。我们需要高效地解决这个问题,并返回每个区间的结果。
这种方法的时间复杂度主要由排序和二分查找决定,复杂度为O(n log n),能够高效处理较大的输入规模。
import java.util.Arrays;import java.util.Comparator;public class Solution { public int[] findRightInterval(int[][] intervals) { int n = intervals.length; int[][] in = new int[n][2]; for (int i = 0; i < n; i++) { in[i][0] = intervals[i][0]; in[i][1] = i; } Arrays.sort(in, new Comparator () { @Override public int compare(int[] o1, int[] o2) { return o1[0] - o2[0]; } }); int[] res = new int[n]; for (int i = 0; i < n; i++) { int end = intervals[i][1]; int left = 0; int right = n; while (left < right) { int mid = left + (right - left) / 2; if (in[mid][0] >= end) { right = mid; } else { left = mid + 1; } } if (left < n && in[left][0] >= end) { res[i] = in[left][1]; } else { res[i] = -1; } } return res; }} in中,然后按起始点排序。这种方法利用了排序和二分查找的高效性,确保了算法的性能。
转载地址:http://ywbv.baihongyu.com/