Komprimieren Sie ein gegebenes Array von Zeichen mit dem folgenden Algorithmus:
Die komprimierte Zeichenfolge s sollte nicht separat zurückgegeben werden, sondern im Eingabezeichen-Array chars gespeichert werden. Beachten Sie, dass Gruppenlängen von 10 oder mehr in chars in mehrere Zeichen aufgeteilt werden.
Nachdem Sie mit der Änderung des Eingabearrays fertig sind, geben Sie die neue Länge des Arrays zurück.
Sie müssen einen Algorithmus schreiben, der nur konstanten zusätzlichen Speicherplatz verwendet.
Um dieses Problem zu lösen, müssen wir das Array durchlaufen und dabei das aktuelle Zeichen und seine Anzahl im Auge behalten. Wenn wir auf ein neues Zeichen stoßen, hängen wir das aktuelle Zeichen und seine Anzahl (falls größer als 1) an das Array an. Wir müssen sicherstellen, dass wir dies vor Ort tun, um den Anforderungen an die Platzkomplexität gerecht zu werden.
Die Brute-Force-Lösung beinhaltet die Erstellung eines neuen Arrays zum Speichern der komprimierten Version des Eingabearrays. Dies ist nicht platzsparend, hilft uns aber, die erforderlichen Schritte zu verstehen.
function compressBruteForce(chars: string[]): number { const n = chars.length; let compressed: string[] = []; let i = 0; while (i 1) { compressed.push(...count.toString().split('')); } } for (let j = 0; jZeitkomplexitätsanalyse:
Die Brute-Force-Lösung ist nicht platzsparend und erfüllt nicht die Einschränkung, nur konstanten zusätzlichen Speicherplatz zu verwenden.
Die optimierte Lösung besteht darin, das Eingabearray an Ort und Stelle zu ändern, um die komprimierte Version zu speichern. Wir verwenden zwei Zeiger: einen zum Lesen des Eingabearrays und einen zum Schreiben der komprimierten Ausgabe.
function compress(chars: string[]): number { let writeIndex = 0; let i = 0; while (i 1) { let countStr = count.toString(); for (let j = 0; jZeitkomplexitätsanalyse:
console.log(compressBruteForce(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compressBruteForce(["a"])); // 1, ["a"] console.log(compressBruteForce(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compressBruteForce(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compressBruteForce(["a","b","c"])); // 3, ["a","b","c"] console.log(compress(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compress(["a"])); // 1, ["a"] console.log(compress(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compress(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compress(["a","b","c"])); // 3, ["a","b","c"]
String-Manipulation:
In-Place-Algorithmen:
Durch das Üben solcher Probleme und Strategien können Sie Ihre Fähigkeiten zur Problemlösung verbessern und besser auf verschiedene Codierungsherausforderungen vorbereitet sein.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3