Maison > développement back-end > C++ > Compter le nombre d'intervalles qui coupent une heure de réunion donnée

Compter le nombre d'intervalles qui coupent une heure de réunion donnée

王林
Libérer: 2023-08-31 20:13:04
avant
748 Les gens l'ont consulté

Compter le nombre dintervalles qui coupent une heure de réunion donnée

Énoncé du problème

Nous avons reçu un tableau bidimensionnel contenant des paires d'heures de début et de fin, représentant un intervalle de temps de 12 heures. Dans le même temps, on nous donne également une chaîne str exprimée en 12 heures. Nous devons trouver le nombre total d’intervalles contenant le temps représenté par str.

Exemple Exemple

Entrez

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”
Copier après la connexion

Sortie

3
Copier après la connexion
La traduction chinoise de

Explication

est :

Explication

L'heure « 2h30 du matin » croise les trois intervalles de temps précédents.

Entrez

arr[][2] = {{“01:02:PM”, “10:55:PM”}, 
{“01:30:AM”, “11:00:AM”}}, str = “11:30:PM”
Copier après la connexion

Sortie

0
Copier après la connexion
La traduction chinoise de

Explication

est :

Explication

L'heure « 23h30 » ne croise aucun des intervalles de temps indiqués dans le tableau.

Méthode 1

Dans cette méthode, nous convertirons l'heure en horloge de 24 heures. Nous calculerons ensuite le nombre total d’intervalles de temps qui coupent le temps donné par comparaison. De plus, nous utiliserons la méthode substr() pour obtenir la sous-chaîne et la méthode stoi() pour convertir la chaîne en entier.

Algorithme

  • Étape 1 - Définissez la fonction convertTime() pour convertir l'heure au format 24 heures.

  • Étape 1.1 - Utilisez la méthode replace() pour remplacer les deux points en troisième position par une chaîne vide.

  • Étape 1.2 - Obtenez les premier et deuxième caractères représentant l'heure à partir de la chaîne donnée et convertissez-la en heures en multipliant le premier nombre par 10 plus le deuxième nombre.

  • Étape 1.3 - Initialisez la variable 'time_24' à zéro.

  • Étape 1.4 - Nous devons gérer deux situations pour convertir l'heure au format 24 heures. Le premier cas se produit le matin et le deuxième l’après-midi.

  • Étape 1.4.1 - Si le 5ème caractère de la chaîne est « A », alors l'heure est AM. Si l'heure est AM et que l'heure est égale à 12, seules les minutes sont extraites de la chaîne car nous considérons 00h00 comme l'heure 00h00. Sinon, convertissez la chaîne d'heure en une valeur entière.

  • Étape 1.4.2 - Si le cinquième caractère de la chaîne est « P », alors l'heure est PM. Extrayez une chaîne de temps et convertissez-la en entier. De plus, si l'heure n'est pas égale à 12, 1200 est ajouté à la variable 'time_24'.

  • Étape 2 - La fonction convertTime() renverra l'heure au format suivant.

    • 12:00 : AM = 0000

    • 12:58 : AM = 0059

    • 11:32 : AM = 1132

    • 11:32 : PM = 1200 + 1132 = 2332

    • 04:56:PM = 1200 + 456 = 1656

    • Si le 5ème caractère de la chaîne est « A », l'heure est AM. Si l'heure est AM et que l'heure est égale à 12, seules les minutes sont extraites de la chaîne car nous considérons 00h00 comme l'heure 00h00. Sinon, convertissez la chaîne d'heure en une valeur entière.

  • Étape 3 - Convertissez la chaîne d'heure donnée au format 24 heures.

  • Étape 4 - Utilisez une boucle for pour parcourir le tableau d'intervalles de temps et convertir chaque chaîne de temps au format 24 heures.

  • Étape 5 - Pendant ce temps, continuez à vérifier si la chaîne de temps donnée se situe entre l'intervalle actuel. Si tel est le cas, augmentez le nombre de « res » de 1.

  • Étape 6 - Renvoyez la valeur de la variable 'res'.

Exemple

se traduit par :

Exemple

#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;
}
Copier après la connexion

Sortie

The total number of the interval that intersects with given meeting time_24 are - 2
Copier après la connexion
  • Complexité temporelle - O(N) puisque nous parcourons le tableau d'intervalles de temps.

  • Complexité spatiale − O(1) car nous n'utilisons pas d'espace constant.

Lors de la résolution du problème ci-dessus, les utilisateurs doivent principalement se concentrer sur la conversion de l'heure au format 24 heures, puis effectuer simplement la comparaison normale.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal