Heim  >  Artikel  >  Backend-Entwicklung  >  Zählen Sie die Anzahl der Intervalle, die eine bestimmte Besprechungszeit überschneiden

Zählen Sie die Anzahl der Intervalle, die eine bestimmte Besprechungszeit überschneiden

王林
王林nach vorne
2023-08-31 20:13:04666Durchsuche

Zählen Sie die Anzahl der Intervalle, die eine bestimmte Besprechungszeit überschneiden

Problemstellung

Wir haben ein zweidimensionales Array erhalten, das Start- und Endzeitpaare enthält, die ein 12-Stunden-Zeitintervall darstellen. Gleichzeitig erhalten wir auch einen String str, ausgedrückt im 12-Stunden-Format. Wir müssen die Gesamtzahl der Intervalle ermitteln, die die durch str dargestellte Zeit enthalten.

Beispiel Beispiel

Eintreten

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”

Ausgabe

3
Die chinesische Übersetzung von

Erklärung

lautet:

Erklärung

Die Zeit „2:30:AM“ überschneidet sich mit den vorherigen drei Zeitintervallen.

Eintreten

arr[][2] = {{“01:02:PM”, “10:55:PM”}, 
{“01:30:AM”, “11:00:AM”}}, str = “11:30:PM”

Ausgabe

0
Die chinesische Übersetzung von

Erklärung

lautet:

Erklärung

Die Zeit „23:30:PM“ überschneidet sich mit keinem der im Array angegebenen Zeitintervalle.

Methode 1

Bei dieser Methode konvertieren wir die Zeit in das 24-Stunden-Format. Anschließend berechnen wir durch Vergleich die Gesamtzahl der Zeitintervalle, die die gegebene Zeit schneiden. Darüber hinaus verwenden wir die Methode substr(), um den Teilstring abzurufen, und die Methode stoi(), um den String in eine Ganzzahl umzuwandeln.

Algorithmus

  • Schritt 1 – Definieren Sie die Funktion „convertTime()“, um die Zeit in das 24-Stunden-Format zu konvertieren.

  • Schritt 1.1 − Verwenden Sie die Methode replace(), um den Doppelpunkt an der dritten Position durch eine leere Zeichenfolge zu ersetzen.

  • Schritt 1.2 − Holen Sie sich das erste und zweite Zeichen, das die Stunde darstellt, aus der angegebenen Zeichenfolge und konvertieren Sie es in Stunden, indem Sie die erste Zahl mit 10 plus der zweiten Zahl multiplizieren.

  • Schritt 1.3 – Initialisieren Sie die Variable „time_24“ auf Null.

  • Schritt 1.4 − Wir müssen zwei Situationen bewältigen, um die Zeit in das 24-Stunden-Format umzuwandeln. Der erste Fall ist morgens und der zweite Fall ist nachmittags.

  • Schritt 1.4.1 – Wenn das 5. Zeichen in der Zeichenfolge „A“ ist, dann ist die Uhrzeit AM. Wenn die Zeit AM ist und die Stunde gleich 12 ist, werden nur die Minuten aus der Zeichenfolge extrahiert, da wir 12:00 AM als die 00:00-Stunde betrachten. Andernfalls konvertieren Sie die Zeitzeichenfolge in einen ganzzahligen Wert.

  • Schritt 1.4.2 – Wenn das fünfte Zeichen in der Zeichenfolge „P“ ist, dann ist die Uhrzeit PM. Extrahieren Sie eine Zeitzeichenfolge und konvertieren Sie sie in eine Ganzzahl. Wenn die Stunde außerdem nicht gleich 12 ist, wird 1200 zur Variablen „time_24“ hinzugefügt.

  • Schritt 2 – Die Funktion „convertTime()“ gibt die Zeit im folgenden Format zurück.

    • 12:00:AM = 0000

    • 12:58:AM = 0059

    • 11:32:AM = 1132

    • 23:32 Uhr = 1200 + 1132 = 2332

    • 16:56 Uhr = 1200 + 456 = 1656

    • Wenn das 5. Zeichen in der Zeichenfolge „A“ ist, ist die Uhrzeit AM. Wenn die Zeit AM ist und die Stunde gleich 12 ist, werden nur die Minuten aus der Zeichenfolge extrahiert, da wir 12:00 AM als die 00:00-Stunde betrachten. Andernfalls konvertieren Sie die Zeitzeichenfolge in einen ganzzahligen Wert.

  • Schritt 3 – Konvertieren Sie die angegebene Zeitzeichenfolge in das 24-Stunden-Format.

  • Schritt 4 – Verwenden Sie eine for-Schleife, um das Zeitintervall-Array zu durchlaufen und jede Zeitzeichenfolge in das 24-Stunden-Format zu konvertieren.

  • Schritt 5 – Überprüfen Sie in der Zwischenzeit weiter, ob die angegebene Zeitzeichenfolge zwischen dem aktuellen Intervall liegt. Wenn ja, erhöhen Sie die Anzahl von „res“ um 1.

  • Schritt 6 – Geben Sie den Wert der Variablen „res“ zurück.

Beispiel

wird übersetzt als:

Beispiel

#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;
}

Ausgabe

The total number of the interval that intersects with given meeting time_24 are - 2
  • Zeitkomplexität – O(N), da wir über die Reihe von Zeitintervallen iterieren.

  • Raumkomplexität − O(1), weil wir keinen konstanten Raum verwenden.

Bei der Lösung des oben genannten Problems sollten sich Benutzer hauptsächlich auf die Konvertierung der Zeit in das 24-Stunden-Format konzentrieren und dann einfach den normalen Vergleich durchführen.

Das obige ist der detaillierte Inhalt vonZählen Sie die Anzahl der Intervalle, die eine bestimmte Besprechungszeit überschneiden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Abscheuliche ZahlenNächster Artikel:Abscheuliche Zahlen