📜  重叠间隔的最大数量

📅  最后修改于: 2021-04-29 02:55:39             🧑  作者: Mango

给定不同的间隔,任务是随时打印这些间隔之间的最大重叠数。

例子:

方法:

  • 想法是将坐标存储在映射有字符“ x”和“ y”的一对新矢量中,以标识坐标。
  • 排序向量。
  • 遍历向量,如果遇到x坐标,则意味着添加了一个新范围,因此更新计数;如果遇到y坐标,则意味着减去了一个范围。
  • 更新每个新坐标的计数值并取最大值。
C++
// C++ program that print maximum
// number of overlap
// among given ranges
#include 
using namespace std;
 
// Function that print maximum
// overlap among ranges
void overlap(vector > v)
{
    // variable to store the maximum
    // count
    int ans = 0;
    int count = 0;
    vector > data;
 
    // storing the x and y
    // coordinates in data vector
    for (int i = 0; i < v.size(); i++) {
 
        // pushing the x coordinate
        data.push_back({ v[i].first, 'x' });
 
        // pushing the y coordinate
        data.push_back({ v[i].second, 'y' });
    }
 
    // sorting of ranges
    sort(data.begin(), data.end());
 
    // Traverse the data vector to
    // count number of overlaps
    for (int i = 0; i < data.size(); i++) {
 
        // if x occur it means a new range
        // is added so we increase count
        if (data[i].second == 'x')
            count++;
 
        // if y occur it means a range
        // is ended so we decrease count
        if (data[i].second == 'y')
            count--;
 
        // updating the value of ans
        // after every traversal
        ans = max(ans, count);
    }
 
    // printing the maximum value
    cout << ans << endl;
}
 
// Driver code
int main()
{
    vector > v
        = { { 1, 2 }, { 2, 4 }, { 3, 6 } };
    overlap(v);
    return 0;
}


Java
// Java program that print maximum
// number of overlap among given ranges
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG{
     
static class pair
{
    int first;
    char second;
     
    pair(int first, char second)
    {
        this.first = first;
        this.second = second;
    }
}
 
// Function that print maximum
// overlap among ranges
static void overlap(int[][] v)
{
     
    // Variable to store the maximum
    // count
    int ans = 0;
    int count = 0;
    ArrayList data = new ArrayList<>();
     
    // Storing the x and y
    // coordinates in data vector
    for(int i = 0; i < v.length; i++)
    {
         
        // Pushing the x coordinate
        data.add(new pair(v[i][0], 'x'));
   
        // pushing the y coordinate
        data.add(new pair(v[i][1], 'y'));
    }
     
    // Sorting of ranges
    Collections.sort(data, (a, b) -> a.first - b.first);
   
    // Traverse the data vector to
    // count number of overlaps
    for(int i = 0; i < data.size(); i++)
    {
         
        // If x occur it means a new range
        // is added so we increase count
        if (data.get(i).second == 'x')
            count++;
   
        // If y occur it means a range
        // is ended so we decrease count
        if (data.get(i).second == 'y')
            count--;
   
        // Updating the value of ans
        // after every traversal
        ans = Math.max(ans, count);
    }
   
    // Printing the maximum value
    System.out.println(ans);
}
 
// Driver code
public static void main(String[] args)
{
    int[][] v = { { 1, 2 },
                  { 2, 4 },
                  { 3, 6 } };
    overlap(v);
}
}
 
// This code is contributed by offbeat


Python3
# Python3 program that print maximum
# number of overlap
# among given ranges
 
# Function that prmaximum
# overlap among ranges
def overlap(v):
 
    # variable to store the maximum
    # count
    ans = 0
    count = 0
    data = []
 
    # storing the x and y
    # coordinates in data vector
    for i in range(len(v)):
 
        # pushing the x coordinate
        data.append([v[i][0], 'x'])
 
        # pushing the y coordinate
        data.append([v[i][1], 'y'])
 
    # sorting of ranges
    data = sorted(data)
 
    # Traverse the data vector to
    # count number of overlaps
    for i in range(len(data)):
 
        # if x occur it means a new range
        # is added so we increase count
        if (data[i][1] == 'x'):
            count += 1
 
        # if y occur it means a range
        # is ended so we decrease count
        if (data[i][1] == 'y'):
            count -= 1
 
        # updating the value of ans
        # after every traversal
        ans = max(ans, count)
 
    # printing the maximum value
    print(ans)
 
# Driver code
v = [ [ 1, 2 ], [ 2, 4 ], [ 3, 6 ] ]
overlap(v)
 
# This code is contributed by mohit kumar 29


输出:
2