- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Count Intervals That Intersects With a Given Meeting Time
Problem Statement
We have given a two-dimensional array containing the pairs of starting and ending times for time intervals in the 12-hour format. Also, we have given string str in the 12-hour time format. We need to find a total number of intervals which included the time represented by str.
Sample Examples
Input
arr[][2] = {{“12:02:AM”, “10:55:PM”}, {“12:51:AM”, “11:40:AM”}, {“01:30:AM”, “12:00:PM”}, {“11:57:PM”, “11:59:PM”}}, str = “2:30:AM”
Output
3
Explanation
The time “2:30:AM” intersects the first three intervals.
Input
arr[][2] = {{“01:02:PM”, “10:55:PM”}, {“01:30:AM”, “11:00:AM”}}, str = “11:30:PM”
Output
0
Explanation
The time ’11:30:PM’ doesn’t intersect any time intervals given in the array.
Approach 1
In this approach, we will convert the time into the 24-hour format. After that, we will count the total number of time intervals that intersect the given time by comparison. Also, we will use the substr() method to get substring and the stoi() method to convert the string to an integer.
Algorithm
Step 1 − Define the convertTime() function to convert time in the 24-hours format.
Step 1.1 − Use the replace() method to replace the colon at the third position with an empty string.
Step 1.2 − Get the first and second characters representing the hour from the given string, and convert them to hours by multiplying the first digit by 10 and adding the second digit.
Step 1.3 − Initialize the ‘time_24’ variable with zero.
Step 1.4 − We need to handle two cases to convert time to 24 hours. The first is in AM, and the second is in PM.
Step 1.4.1 − If the 5th character in the string is ‘A’, the time is in AM. If the time is in AM, and the hours are equal to 12, extract the minutes only from the string because we assume 12:00 AM as 00:00 hours. Otherwise, convert the time string to an integer value.
Step 1.4.2 − If the 5th character in the string is ‘P’, the time is in PM. Extract the time string, and convert it to an integer. Also, if hours are not equal to 12, add 1200 to the ‘time_24’ variable.
Step 2 − The convertTime() function will return the time in the below format.
12:00:AM = 0000
12:58:AM = 0059
11:32:AM = 1132
11:32:PM = 1200 + 1132 = 2332
04:56:PM = 1200 + 456 = 1656
If the 5th character in the string is ‘A’, the time is in AM. If the time is in AM, and the hours are equal to 12, extract the minutes only from the string because we assume 12:00 AM as 00:00 hours. Otherwise, convert the time string to an integer value.
Step 3 − Convert the given time string to the 24-hour format.
Step 4 − Use the for loop to traverse the array of time intervals and convert each time string into the 24-hour format.
Step 5 − Also, keep checking whether the given time string is between current intervals. If yes, increase the count of ‘res’ by 1.
Step 6 − Return the value of the ‘res’ variable.
Example
#include <bits/stdc++.h> using namespace std; // Function to convert the given time_24 in 24 hours format int convertTime(string str){ // Remove the colon from the string str.replace(2, 1, ""); // Stores the hour int char_h1 = (int)str[1] - '0'; int char_h2 = (int)str[0] - '0'; int hours = (char_h2 * 10 + char_h1 % 10); // variable to store the time in 24 hours format int time_24 = 0; // If the time is in "AM." if (str[5] == 'A'){ // If hours are equal to 12, then update it to 0 as 12 AM, and only minutes to time_24 if (hours == 12){ time_24 += stoi(str.substr(2, 2)); } else { // add hours and minutes to time_24 time_24 += stoi(str.substr(0, 4)); } } // If time is in "PM" else { // If hours is equal to 12, add time as it is to time_24 if (hours == 12){ time_24 += stoi(str.substr(0, 4)); } else { // add time to time_24 time_24 += stoi(str.substr(0, 4)); // add 1200 = 12 : 00 PM to time_24 to convert in 24 hours format. time_24 += 1200; } } return time_24; } // Function to find the total number of intervals that intersects with given meeting time_24 int totalIntersects(string arr[][2], int len, string str){ // to store the total number of intervals int res = 0; // convert the given time_24 in 24 hours format int convertedStr = convertTime(str); // Traverse the array for (int i = 0; i < len; i++){ // convert the starting time_24 of the current interval in 24-hour format int initial = convertTime(arr[i][0]); // convert the ending time_24 of the current interval in 24-hour format int end = convertTime(arr[i][1]); // If the given time_24 lies in the interval [initial, end], then increment res by 1 if ((initial <= convertedStr && convertedStr <= end) || (convertedStr >= end && convertedStr <= initial)) res++; } // Return res return res; } int main(){ string arr[][2] = {{"11:00:AM", "11:55:PM"}, {"12:19:AM", "9:30:AM"}, {"12:51:AM", "12:59:PM"}, {"6:57:AM", "7:50:PM"}}; string str = "12:54:AM"; int len = sizeof(arr) / sizeof(arr[0]); cout << "The total number of the interval that intersects with given meeting time_24 are - " << totalIntersects(arr, len, str) << endl; }
Output
The total number of the interval that intersects with given meeting time_24 are - 2
Time complexity − O(N), as we iterate through the array of time intervals.
Space complexity − O(1), as we don’t use constant space.
While solving the above problem, users should mainly focus on converting time to a 24-hours format, and after that, they just need to do normal comparisons.