给定N个[l,r]形式的间隔,任务是找到所有间隔的交集。相交是位于所有给定区间内的区间。如果不存在这样的交集,则打印-1 。
例子:
Input: arr[] = {{1, 6}, {2, 8}, {3, 10}, {5, 8}}
Output: [5, 6]
[5, 6] is the common interval that lies in all the given intervals.
Input: arr[] = {{1, 6}, {8, 18}}
Output: -1
No intersection exists between the two given ranges.
方法:
- 首先将第一个时间间隔视为必需的答案。
- 现在,从第二个间隔开始,尝试搜索相交。可能出现两种情况:
- 在[l1,r1]和[l2,r2]之间不存在交集。仅当r1
或r2 时才可能。在这种情况下,答案将为0,即不存在交集。 - 在[l1,r1]和[l2,r2]之间存在一个交集。然后,所需的交点将为[max(l1,l2),min(r1,r2)] 。
- 在[l1,r1]和[l2,r2]之间不存在交集。仅当r1
下面是上述方法的实现:
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
?>
输出:
[5, 6]