元のタイトル
区間のセットが与えられた場合、各区間iについて、開始点が区間iの終点以上である区間jがあるかどうかを確認します。これはiの「右側」でjと呼ぶことができます。
どの区間でも、条件を満たす区間jの最小インデックスを格納する必要があります。つまり、区間jは、「正しい」区間にするための最小の開始点を持ちます。区間jが存在しない場合は、区間iを-1として格納します。最後に、保存された間隔値の配列を出力する必要があります。
注意:
間隔の終了は常に開始点よりも大きいと想定できます。
これらの間隔のいずれも同じ開始点を持っていないと想定できます。
例1:
输入: [ [1,2] ]
输出: [-1]
解释:集合中只有一个区间,所以输出-1。
例2:
输入: [ [3,4], [2,3], [1,2] ]
输出: [-1, 0, 1]
解释:对于[3,4],没有满足条件的“右侧”区间。
对于[2,3],区间[3,4]具有最小的“右”起点;
对于[1,2],区间[2,3]具有最小的“右”起点。
例3:
输入: [ [1,4], [2,3], [3,4] ]
输出: [-1, 2, -1]
解释:对于区间[1,4]和[3,4],没有满足条件的“右侧”区间。
对于[2,3],区间[3,4]有最小的“右”起点。
class Solution {
public int[] findRightInterval(int[][] intervals) {
}
}
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/find-right-interval
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
アイデア
3つの例を観察することにより、ルールは次のとおりです
。1。複数の間隔が与えられた場合、これらの各間隔で、セットの残りの間隔が右側にあるかどうかを判断します。ある
場合は出力します。ある場合は出力します。元のコレクションにインデックスがなく、出力-1。
2.コード入力は2次元のint配列であり、出力はint配列です。
総当たり攻撃が使用できることがわかりました:
package demo02;
import java.util.Arrays;
class Solution {
public static int[] findRightInterval(int[][] intervals) {
int[] res = new int[intervals.length];
for (int i = 0;i < intervals.length;i++) {
int[] out = intervals[i];
int right = intervals[i][1];
res[i] = -1;
for (int j = 0;j < intervals.length;j++) {
int[] in = intervals[j];
int left = in[0];
if (in[0] == out[0] && in[1] == out[1]){
continue;
}else if (left >= right){
res[i] = j;
}
}
}
return res;
}
public static void main(String[] args) {
int[][] a = {
{
1,2}};
int[][] b = {
{
3,4},{
2,3},{
1,2}};
int[][] c = {
{
1,4},{
2,3},{
3,4}};
System.out.println(Arrays.toString(findRightInterval(a)));
System.out.println(Arrays.toString(findRightInterval(b)));
System.out.println(Arrays.toString(findRightInterval(c)));
}
}
演算結果:
[-1]
[-1, 0, 1]
[-1, 2, -1]
他の方法は関連する知識を学んでいないので、それを書く方法がわかりません。現時点では、偉大な神々の参照回答を見る必要があります。
公式ウェブサイトによる複雑さの分析
その他の回答については、公式ウェブサイトに
アクセスしてhttps://leetcode-cn.com/problems/find-right-intervalをご覧ください。