Stellt die angegebene Zeichenfolge der Länge fünf als Zeitangabe im HH:MM-Format dar. Die Zeichenfolge kann einige „?“ enthalten und wir müssen sie durch eine beliebige Zahl ersetzen, damit das Ergebnis eine gültige Zeit und wahrscheinlich die größtmögliche Zeit ist. Darüber hinaus sind die angegebenen String-Nummern gültig und das „:“ erscheint an der genauen Position des Strings. Wir werden zuerst Brute-Force-Methoden und dann effiziente Methoden verwenden.
Given string: 12:5? Output: 12:59
Wir haben nur einen Platz zu besetzen und die maximale Zeit, die wir bekommen können, ist 12:59.
Given string: ?0:?9 Output: 20:59
Wir haben hier zwei freie Plätze, zunächst konzentrieren wir uns auf den Stundenteil, wir haben drei Optionen 0, 1 und 2, um sie zu füllen. Für den Minutenteil haben wir die Wahl zwischen 0 und 5, zur Maximierung können wir 5 eingeben.
Wir haben uns Beispiele angesehen. Schauen wir uns nun die verschiedenen Arten von Situationen an, mit denen wir konfrontiert sein könnten −
Wir haben zwei Teile der Zeichenfolge, den Stundenteil und den Minutenteil.
Der Stundenteil reicht von 0 bis 23 und der Minutenteil reicht von 0 bis 59.
Im Stundenteil gibt es noch mehr Situationen−
‘x?’ wobei x 0, 1 und 2 sein kann. Für 0 können wir 0 als beste Wahl wählen, für 1 können wir 9 als beste Wahl wählen und für 2 können wir 3 als beste Wahl wählen.
'?x', wobei x zwischen 0 und 9 liegen kann. Wenn x im Bereich von 0 bis 3 liegt, können wir es durch 2 ersetzen, andernfalls ist 1 das Beste.
‘??’ Da wir maximieren müssen, ersetzen wir es durch 23.
Besprechungsprotokoll, einige haben weitere Fälle −
‘x?’ wobei x im Bereich von 0 bis 5 liegen kann. 9 wäre unsere beste Wahl, um „?“ zu ersetzen.
‘?x‘ wobei x im Bereich von 0 bis 9 liegen kann. 5 wäre unsere beste Wahl, um „?“ zu ersetzen.
"??" weil wir es maximieren müssen und es dann durch 59 ersetzen.
Werfen wir einen Blick auf den Code, der die oben genannten Schritte implementiert –
Die chinesische Übersetzung von#include <iostream> using namespace std; // function to replace hours string replaceHours(string s){ if(s[0] == '?' && s[1] == '?'){ //Both hour characters are '?' // replace with the maximum hour we can achieve s[0] = '2'; s[1] = '3'; } else if(s[0] == '?'){ // if the second number of hours is in the range 0 to 3 // replace by 2 if(s[1] < 4){ s[0] = '2'; } else{ s[0] = '1'; // otherwise replace by one } } else if(s[1] == '?'){ // if the first character is '2' we can go only upto 3 if(s[0] == '2'){ s[1] = '3'; } else{ s[1] = '9'; // else we can go for 9 } } return s; } // function to replace minutes string replaceMinutes(string s){ if(s[3] == '?' && s[4] == '?'){ // both minutes characters are '?' // replace with maximum minutes we can acheive s[3] = '5'; s[4] = '9'; } else if(s[3] == '?'){ // we can maximum get 5 here s[3] = '5'; } else if(s[4] == '?'){ // we can get maximum 9 here s[4] = '9'; } return s; } int main(){ string str = "2?:3?"; // given string // calling the function for updation of the minutes str = replaceMinutes(str); // calling to the function for updation of the hours str = replaceHours(str); // printing the final answer cout<<"The maximum time we can get by replacing ? is: "<< str<<endl; return 0; }
The maximum time we can get by replacing ? is: 23:39
Die zeitliche Komplexität des obigen Codes ist O(1) oder konstant, da wir keine Schleifen oder rekursiven Aufrufe verwenden, sondern nur die If-Else-Bedingungen prüfen
Die Speicherplatzkomplexität des obigen Codes beträgt O(1), da wir keinen zusätzlichen Speicherplatz verwenden. Außerdem beträgt die Größe der von uns übergebenen Zeichenfolge für diese Funktion immer einen festen Wert von 5.
Hinweis: Um den Code schöner oder lesbarer zu machen, können Sie switch-Anweisungen verwenden. Sie haben keinen Einfluss auf die zeitliche oder räumliche Komplexität und machen das Lesen effizienter.
Auch das Zurückverfolgen und erneute Überprüfen ist eine Lösung, aber dies prüft jeden Fall und ist hier nicht effizient umzusetzen.
In diesem Tutorial erhalten wir eine Zeichenfolge, die die Zeit im 24-Stunden-Format darstellt. Es gibt einige „?“ in der Zeichenfolge, die ersetzt werden müssen, um die maximal gültige Zeit zu erhalten, und die Zeichen in der Zeichenfolge verweisen garantiert immer auf die gültige Zeit. Wir haben eine if-else-Bedingung und zwei Funktionen verwendet, um das „?“ durch den entsprechenden Fall zu ersetzen. Da wir keine Schleifen oder rekursiven Funktionen verwenden, ist die zeitliche und räumliche Komplexität des obigen Codes konstant.
Das obige ist der detaillierte Inhalt vonMaximieren Sie die fehlenden Werte innerhalb eines bestimmten Zeitraums im Format HH:MM. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!