Dada una array arr[][2] que consta de N pares de strings que representan la hora de inicio y finalización (en formato de 12 horas ) y una string P que representa la hora de la reunión, la tarea es encontrar el recuento de intervalos que contiene el tiempo p
Ejemplos:
Entrada: P = “12:01:AM”, arr[][2] = {{“12:00:AM”, “11:55:PM”}, {“12:01:AM”, “11: 50:AM”}, {“12:30:AM”, “12:00:PM”}, {“11:57:AM”, “11:59:PM”}}
Salida: 2
Explicación: La hora P se encuentra en el primer y segundo intervalo de tiempo.Entrada: P = “12:01:AM”, arr[][2] = {{“09:57:AM”, “12:00:PM”} }
Salida: 0
Explicación: Ningún intervalo contiene la hora P.
Enfoque: La idea es convertir primero todas las horas del formato de 12 horas al formato de 24 horas y luego comparar el rango con la Hora P . Siga los pasos a continuación para resolver el problema:
- Primero, convierta todas las horas del formato de 12 horas al formato de 24 horas y luego almacene el valor entero del formato de hora de 24 horas.
- Inicialice una variable, digamos ans, para almacenar el conteo de intervalos en los que se encuentra P.
- Recorra la array arr[] e incremente el conteo de ans en 1 si (P ≥ L && P ≤ R) o (P ≥ R && P ≤ L) .
- Finalmente, después de completar los pasos anteriores, imprima ans .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the above approach #include <bits/stdc++.h> 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[1] - '0'; int h2 = (int)str[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[5] == '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[][2], 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 int main() { string arr[][2] = { { "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[0]); 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][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.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[1] - '0'; int h2 = (int)str[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[5] == '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
2
Complejidad temporal: O(N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por shreyajaiswal3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA