📜  求所有区间的交点

📅  最后修改于: 2021-10-25 06:51:44             🧑  作者: Mango

给定[l, r]形式的N 个区间,任务是找到所有区间的交集。交叉点是位于所有给定区间内的区间。如果不存在这样的交集,则打印-1
例子:

方法:

  • 首先考虑第一个区间作为所需的答案。
  • 现在,从第二个间隔开始,尝试搜索交叉点。可能出现两种情况:
    1. [l1, r1][l2, r2]之间不存在交集。仅当r1 < l2r2 < l1时才可能。在这种情况下,答案将为0,即不存在交集。
    2. [l1, r1][l2, r2]之间存在交集。那么所需的交集将是[max(l1, l2), min(r1, r2)]

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function to print the intersection
void findIntersection(int intervals[][2], int N)
{
    // First interval
    int l = intervals[0][0];
    int r = intervals[0][1];
 
    // Check rest of the intervals and find the intersection
    for (int i = 1; i < N; i++) {
 
        // If no intersection exists
        if (intervals[i][0] > r || intervals[i][1] < l) {
            cout << -1;
            return;
        }
 
        // Else update the intersection
        else {
            l = max(l, intervals[i][0]);
            r = min(r, intervals[i][1]);
        }
    }
 
    cout << "[" << l << ", " << r << "]";
}
 
// Driver code
int main()
{
    int intervals[][2] = {
        { 1, 6 },
        { 2, 8 },
        { 3, 10 },
        { 5, 8 }
    };
    int N = sizeof(intervals) / sizeof(intervals[0]);
    findIntersection(intervals, N);
}


Java
// Java implementation of the approach
import java.io.*;
 
class GFG
{
     
// Function to print the intersection
static void findIntersection(int intervals[][], int N)
{
    // First interval
    int l = intervals[0][0];
    int r = intervals[0][1];
 
    // Check rest of the intervals
    // and find the intersection
    for (int i = 1; i < N; i++)
    {
 
        // If no intersection exists
        if (intervals[i][0] > r ||
            intervals[i][1] < l)
        {
            System.out.println(-1);
            return;
        }
 
        // Else update the intersection
        else
        {
            l = Math.max(l, intervals[i][0]);
            r = Math.min(r, intervals[i][1]);
        }
    }
    System.out.println ("[" + l +", " + r + "]");
}
 
    // Driver code
    public static void main (String[] args)
    {
 
        int intervals[][] = {{ 1, 6 },
                            { 2, 8 },
                            { 3, 10 },
                            { 5, 8 }};
        int N = intervals.length;
        findIntersection(intervals, N);
    }
}
 
// This Code is contributed by ajit..


Python
# Python3 implementation of the approach
 
# Function to print the intersection
def findIntersection(intervals,N):
 
    # First interval
    l = intervals[0][0]
    r = intervals[0][1]
 
    # Check rest of the intervals
    # and find the intersection
    for i in range(1,N):
 
        # If no intersection exists
        if (intervals[i][0] > r or intervals[i][1] < l):
            print(-1)
 
        # Else update the intersection
        else:
            l = max(l, intervals[i][0])
            r = min(r, intervals[i][1])
         
     
 
    print("[",l,", ",r,"]")
 
# Driver code
 
intervals= [
            [ 1, 6 ],
            [ 2, 8 ],
            [ 3, 10 ],
            [ 5, 8 ]
            ]
N =len(intervals)
findIntersection(intervals, N)
 
# this code is contributed by mohit kumar


C#
// C# implementation of the approach
using System;
 
class GFG
{
     
// Function to print the intersection
static void findIntersection(int [,]intervals, int N)
{
    // First interval
    int l = intervals[0, 0];
    int r = intervals[0, 1];
 
    // Check rest of the intervals
    // and find the intersection
    for (int i = 1; i < N; i++)
    {
 
        // If no intersection exists
        if (intervals[i, 0] > r ||
            intervals[i, 1] < l)
        {
            Console.WriteLine(-1);
            return;
        }
 
        // Else update the intersection
        else
        {
            l = Math.Max(l, intervals[i, 0]);
            r = Math.Min(r, intervals[i, 1]);
        }
    }
    Console.WriteLine("[" + l + ", " + r + "]");
}
 
// Driver code
public static void Main()
{
    int [,]intervals = {{ 1, 6 }, { 2, 8 },
                        { 3, 10 }, { 5, 8 }};
    int N = intervals.GetLength(0);
    findIntersection(intervals, N);
}
}
 
// This code is contributed by Ryuga


PHP
 $r ||
            $intervals[$i][1] < $l)
        {
            echo -1;
            return;
        }
 
        // Else update the intersection
        else
        {
            $l = max($l, $intervals[$i][0]);
            $r = min($r, $intervals[$i][1]);
        }
    }
 
    echo "[" . $l . ", " . $r . "]";
}
 
// Driver code
$intervals = array(array(1, 6), array(2, 8),
                   array(3, 10), array(5, 8));
$N = sizeof($intervals);
findIntersection($intervals, $N);
 
// This code is contributed
// by Akanksha Rai
?>


Javascript


输出:
[5, 6]