Maison > Article > développement back-end > Compter le nombre d'intervalles qui coupent une heure de réunion donnée
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.
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”
3La traduction chinoise de
L'heure « 2h30 du matin » croise les trois intervalles de temps précédents.
arr[][2] = {{“01:02:PM”, “10:55:PM”}, {“01:30:AM”, “11:00:AM”}}, str = “11:30:PM”
0La traduction chinoise de
L'heure « 23h30 » ne croise aucun des intervalles de temps indiqués dans le tableau.
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.
É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'.
#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; }
The total number of the interval that intersects with given meeting time_24 are - 2
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!