2つの間隔の交点を見つける最も簡単な方法


8

今、私は問題を抱えています。ささいなことのようですが、それでも適切な解決策を見つけるのは難しいです。問題は次のとおりです。1つには2つの間隔があり、それらの交点を見つけることです。

例えば:

  • 交差点[0,3] - [2,4]されている[2、3]
  • 交差点[-1、34]&[0,4]されている[0,4]
  • [0、3]&[4、4]の交差が空のセットです

考えられるすべてのケースのテストを使用することで問題を解決できることは明らかですが、時間がかかり、間違いを起こしやすい傾向があります。問題に取り組む簡単な方法はありますか?あなたが解決策を知っている場合は、私を助けてください。とてもありがたいです。


私の質問の何が問題になっていますか?なぜそれが投票されたのですか?
おひだの2017

2
いくつかのこと..これは宿題の質問のようです。もしそうなら、それを呼び出してタグを付ける必要があります。あなたの問題の背景も不明確です。純粋に数学の問題(この場合、ここではなくMath.SEに属している)、またはプログラミング演習として解釈できます。
スペンサーブリンゲルソン2017

これらのメソッドの名前を検索する場合、それはInterval Arithmeticと呼ばれます。
アンドレ

回答:


17

この問題の解決策は次のように定義できます。入力間隔はおよびとして定義でき、出力間隔はとして定義。次のようにして、交差点を見つけることができます。a=[asae]b=[bsbe]o=[osoe]o=ab

if(または){ return }bs>aeas>be

その他 {

os=最高asbs

oe=aebe

return [osoe]

}


1

2つの入力区間しかないと仮定します。

  1. 最初のインターバルの開始時刻<2番目のインターバルの開始時刻であることを確認してください。
  2. オーバーラップとは、インターバルの終了時刻が別のインターバルの開始時刻より後であることを意味します
public int[] overlap(int[] i1, int[] i2) {
    // Make sure the start time of first interval < the start time of second interval.
    if(i1.startTime > i2.startTime) {
        return overlap(i2, i1);
    }

    // Overlap means an interval's end time is after another interval's start time
    if(i1.endTime > i2.startTime) {
        return new Interval(i2.startTime, Math.min(i1.endTime, i2.endTime));
    }
    else {
        return null;
    }
}
  • 時間の複雑さ:O(1)
  • スペースの複雑さ:O(1)

0

別の簡単な方法で

与えられた:
2インターバル
インターバル1:(start1、end1)
インターバル2:(start2、end2)

必須:
両方の間隔が交差しているかどうかをチェックするブール条件

解決策:
以下の2つの条件が:2点の間隔が交差していることを考慮することが真でなければなりません
。1. END2> = START1
2. START2 <= END1

// check 2 intervals are intersected or not
if( (end2 >= start1) && (start2 <= end1) ){
    // 2 intervals are intersected
    // ...

}else{
    // 2 intervals are NOT intersected
    // ...

}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.