Related Articles

# Count intervals that intersects with a given meeting time

• Last Updated : 07 May, 2021

Given an array arr[] consisting of N pair of strings representing the starting and ending time (in 12 hours format) and a string P which represents the time of the meeting, the task is to find the count of intervals that contains the time P.

Examples:

Input: P = “12:01:AM”, arr[] = {{“12:00:AM”, “11:55:PM”}, {“12:01:AM”, “11:50:AM”}, {“12:30:AM”, “12:00:PM”}, {“11:57:AM”, “11:59:PM”}}
Output: 2
Explanation: The time P lies in the first and second time intervals.

Input: P = “12:01:AM”, arr[] = {{“09:57:AM”, “12:00:PM”} }
Output: 0
Explanation: No interval contains the time P.

Approach: The idea is to first convert all the times from 12-hour format into 24-hour format and then compare the range with Time P. Follow the steps below to solve the problem:

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the above approach``#include ``using` `namespace` `std;` `// Function to convert a time in 24``// hour format to an equivalent integer``int` `convert(string str)``{``    ``// Removes ":" at 3rd position``    ``str.replace(2, 1, ``""``);``  ` `    ``// Calculate hours``    ``int` `h1 = (``int``)str - ``'0'``;``    ``int` `h2 = (``int``)str - ``'0'``;``    ``int` `hh = (h2 * 10 + h1 % 10);` `    ``// Stores the time in 24 hours format``    ``int` `time` `= 0;` `    ``// If time is in "AM"``    ``if` `(str == ``'A'``) {` `        ``// If hh is equal to 12``        ``if` `(hh == 12)``            ``time` `+= stoi(str.substr(2, 2));` `        ``else` `{``            ``time` `+= stoi(str.substr(0, 2));``        ``}``    ``}` `    ``// If time is in "PM"``    ``else` `{` `        ``// If hh is equal to 12``        ``if` `(hh == 12) {``          ` `            ``time` `+= stoi(str.substr(0, 4));``        ``}``        ``else` `{` `            ``time` `+= stoi(str.substr(0, 4));``            ``time` `+= 1200;``        ``}``    ``}` `    ``// Return time``    ``return` `time``;``}``// Function to count number``// of intervals in which p lies``int` `countOverlap(string arr[],``                 ``int` `n, string p)``{``    ``// Stores the count``    ``int` `ans = 0;` `    ``// Stores the integer value of``    ``// 24 hours time format of P``    ``int` `M = convert(p);` `    ``// Traverse the array``    ``for` `(``int` `i = 0; i < n; i++) {` `        ``// Stores the integer value of``        ``// 24 hours time format of arr[i]``        ``int` `L = convert(arr[i]);` `        ``// Stores the integer value of``        ``// 24 hours time format of arr[i]``        ``int` `R = convert(arr[i]);` `        ``// If M lies within the [L, R]``        ``if` `((L <= M && M <= R)``            ``|| (M >= R && M <= L))``            ``// Increment ans by 1``            ``ans++;``    ``}` `    ``// Return ans``    ``return` `ans;``}` `// Driver Code``int` `main()``{``    ``string arr[] = { { ``"12:00:AM"``, ``"11:55:PM"` `},``                        ``{ ``"12:01:AM"``, ``"11:50:AM"` `},``                        ``{ ``"12:30:AM"``, ``"12:00:PM"` `},``                        ``{ ``"11:57:AM"``, ``"11:59:PM"` `} };``    ``string P = ``"12:01:PM"``;``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr);` `    ``cout << countOverlap(arr, N, P) << endl;``}`

## Java

 `// Java implementation of the above approach``import` `java.io.*;``class` `GFG``{` `    ``// Function to convert a time in 24``    ``// hour format to an equivalent integer``    ``static` `int` `convert(String str)``    ``{``      ` `        ``// Removes ":" at 3rd position``        ``str = str.substring(``0``, ``2``) + str.substring(``3``);` `        ``// Calculate hours``        ``int` `h1 = (``int``)str.charAt(``1``) - ``'0'``;``        ``int` `h2 = (``int``)str.charAt(``0``) - ``'0'``;``        ``int` `hh = (h2 * ``10` `+ h1 % ``10``);` `        ``// Stores the time in 24 hours format``        ``int` `time = ``0``;` `        ``// If time is in "AM"``        ``if` `(str.charAt(``5``) == ``'A'``) {` `            ``// If hh is equal to 12``            ``if` `(hh == ``12``)``                ``time += Integer.parseInt(``                    ``str.substring(``2``, ``4``));` `            ``else` `{``                ``time += Integer.parseInt(``                    ``str.substring(``0``, ``2``));``            ``}``        ``}` `        ``// If time is in "PM"``        ``else` `{` `            ``// If hh is equal to 12``            ``if` `(hh == ``12``) {``                ``time += Integer.parseInt(``                    ``str.substring(``0``, ``4``));``            ``}``            ``else` `{` `                ``time += Integer.parseInt(``                    ``str.substring(``0``, ``4``));``                ``time += ``1200``;``            ``}``        ``}` `        ``// Return time``        ``return` `time;``    ``}``  ` `    ``// Function to count number``    ``// of intervals in which p lies``    ``static` `int` `countOverlap(String arr[][], ``int` `n, String p)``    ``{``      ` `        ``// Stores the count``        ``int` `ans = ``0``;` `        ``// Stores the integer value of``        ``// 24 hours time format of P``        ``int` `M = convert(p);` `        ``// Traverse the array``        ``for` `(``int` `i = ``0``; i < n; i++)``        ``{` `            ``// Stores the integer value of``            ``// 24 hours time format of arr[i]``            ``int` `L = convert(arr[i][``0``]);` `            ``// Stores the integer value of``            ``// 24 hours time format of arr[i]``            ``int` `R = convert(arr[i][``1``]);` `            ``// If M lies within the [L, R]``            ``if` `((L <= M && M <= R) || (M >= R && M <= L))``              ` `                ``// Increment ans by 1``                ``ans++;``        ``}` `        ``// Return ans``        ``return` `ans;``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``String[][] arr``            ``= ``new` `String[][] { { ``"12:00:AM"``, ``"11:55:PM"` `},``                               ``{ ``"12:01:AM"``, ``"11:50:AM"` `},``                               ``{ ``"12:30:AM"``, ``"12:00:PM"` `},``                               ``{ ``"11:57:AM"``, ``"11:59:PM"` `} };``        ``String P = ``"12:01:PM"``;``        ``int` `N = arr.length;` `        ``System.out.println(countOverlap(arr, N, P));``    ``}``}` `// This code is contributed by Dharanendra L V`

## C#

 `// C# implementation of the above approach``using` `System;` `class` `GFG{` `// Function to convert a time in 24``// hour format to an equivalent integer``static` `int` `convert(String str)``{``    ` `    ``// Removes ":" at 3rd position``    ``str = str.Substring(0, 2) + str.Substring(3);` `    ``// Calculate hours``    ``int` `h1 = (``int``)str - ``'0'``;``    ``int` `h2 = (``int``)str - ``'0'``;``    ``int` `hh = (h2 * 10 + h1 % 10);` `    ``// Stores the time in 24 hours format``    ``int` `time = 0;` `    ``// If time is in "AM"``    ``if` `(str == ``'A'``)``    ``{``        ` `        ``// If hh is equal to 12``        ``if` `(hh == 12)``            ``time += Int32.Parse(``                ``str.Substring(2, 2));` `        ``else``        ``{``            ``time += Int32.Parse(``                ``str.Substring(0, 2));``        ``}``    ``}` `    ``// If time is in "PM"``    ``else``    ``{``        ` `        ``// If hh is equal to 12``        ``if` `(hh == 12)``        ``{``            ``time += Int32.Parse(``                ``str.Substring(0, 4));``        ``}``        ``else``        ``{``            ``time += Int32.Parse(``                ``str.Substring(0, 4));``            ``time += 1200;``        ``}``    ``}` `    ``// Return time``    ``return` `time;``}` `// Function to count number``// of intervals in which p lies``static` `int` `countOverlap(String [,]arr, ``int` `n,``                        ``String p)``{``  ` `    ``// Stores the count``    ``int` `ans = 0;` `    ``// Stores the integer value of``    ``// 24 hours time format of P``    ``int` `M = convert(p);` `    ``// Traverse the array``    ``for``(``int` `i = 0; i < n; i++)``    ``{``        ` `        ``// Stores the integer value of``        ``// 24 hours time format of arr[i,0]``        ``int` `L = convert(arr[i,0]);` `        ``// Stores the integer value of``        ``// 24 hours time format of arr[i,1]``        ``int` `R = convert(arr[i,1]);` `        ``// If M lies within the [L, R]``        ``if` `((L <= M && M <= R) ||``            ``(M >= R && M <= L))``          ` `            ``// Increment ans by 1``            ``ans++;``    ``}` `    ``// Return ans``    ``return` `ans;``}` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ``String[,] arr = ``new` `String[,]{``         ``{ ``"12:00:AM"``, ``"11:55:PM"` `},``         ``{ ``"12:01:AM"``, ``"11:50:AM"` `},``         ``{ ``"12:30:AM"``, ``"12:00:PM"` `},``         ``{ ``"11:57:AM"``, ``"11:59:PM"` `} };``    ``String P = ``"12:01:PM"``;``    ``int` `N = arr.GetLength(0);` `    ``Console.WriteLine(countOverlap(arr, N, P));``}``}` `// This code is contributed by 29AjayKumar`
Output:
`2`

Time Complexity: O(N)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up