Cuente los intervalos que se cruzan con un tiempo de reunión dado

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:

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
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *