2554. Maximale Anzahl von Ganzzahlen zur Auswahl aus einem Bereich I
Schwierigkeit:Mittel
Themen:Array, Hash-Tabelle, Binäre Suche, Gierig, Sortieren
Sie erhalten ein Ganzzahl-Array banned und zwei Ganzzahlen n und maxSum. Sie wählen eine bestimmte Anzahl von Ganzzahlen gemäß den folgenden Regeln aus:
- Die gewählten ganzen Zahlen müssen im Bereich [1, n] liegen.
- Jede ganze Zahl kann höchstens einmal ausgewählt werden.
- Die ausgewählten Ganzzahlen sollten nicht im Array verboten sein.
- Die Summe der ausgewählten Ganzzahlen sollte maxSum nicht überschreiten.
Gib die maximale Anzahl an Ganzzahlen zurück, die Sie gemäß den genannten Regeln auswählen können.
Beispiel 1:
- Eingabe:banned = [1,6,5], n = 5, maxSum = 6
- Ausgabe: 2
-
Erklärung: Sie können die ganzen Zahlen 2 und 4 wählen.
- 2 und 4 stammen aus dem Bereich [1, 5], beide tauchten nicht in Banned auf und ihre Summe beträgt 6, was maxSum nicht überschreitet.
Beispiel 2:
- Eingabe:banned = [1,2,3,4,5,6,7], n = 8, maxSum = 1
- Ausgabe: 0
- Erklärung:Sie können keine ganze Zahl auswählen, während Sie die genannten Bedingungen befolgen.
Beispiel 3:
- Eingabe:banned = [11], n = 7, maxSum = 50
- Ausgabe: 7
-
Erklärung: Sie können die ganzen Zahlen 1, 2, 3, 4, 5, 6 und 7 auswählen.
- Sie stammen aus dem Bereich [1, 7], alle sind nicht in Banned enthalten, und ihre Summe beträgt 28, was maxSum nicht übersteigt.
Einschränkungen:
- 1 4
- 1 4
- 1 9
Hinweis:
- Behalten Sie die verbotenen Zahlen, die kleiner als n sind, in einem Satz.
- Schleifen Sie die Zahlen von 1 bis n durch und verwenden Sie sie, wenn die Zahl nicht gesperrt ist.
- Fügen Sie weiterhin Zahlen hinzu, solange diese nicht verboten sind und ihre Summe weniger als k beträgt.
Lösung:
Wir können einen gierigen Ansatz verwenden, bei dem wir über die Zahlen von 1 bis n iterieren, die verbotenen Zahlen überspringen und die gültigen Zahlen (die nicht im verbotenen Array enthalten sind) so lange zu einer laufenden Summe addieren, bis wir die maxSum erreichen.
Hier ist die Schritt-für-Schritt-Lösung:
Schritte:
- Verbotenes Array in einen Satz für schnelle Suchvorgänge konvertieren: Mit array_flip() kann das gesperrte Array in einen Satz für Suchvorgänge mit durchschnittlicher O(1)-Zeitkomplexität konvertiert werden.
- Iterieren Sie von 1 bis n:Überprüfen Sie jede Zahl. Wenn sie nicht in der verbotenen Menge enthalten ist und wenn die Addition maxSum nicht überschreitet, addieren Sie sie zur Summe und erhöhen Sie die Anzahl.
- Hören Sie auf, die nächste Zahl zu addieren, die maxSum überschreitet: Da das Ziel darin besteht, die Anzahl der ausgewählten ganzen Zahlen zu maximieren, ohne die Summe zu überschreiten, stellt dieser gierige Ansatz sicher, dass wir zuerst die kleinsten verfügbaren Zahlen nehmen.
Ansatz:
- Gesperrte Nummern ausschließen: Wir verfolgen die gesperrten Nummern in einem Satz (oder einem assoziativen Array) für eine schnelle Suche.
- Gierige Auswahl: Beginnen Sie mit der Auswahl von Zahlen von 1 bis n in aufsteigender Reihenfolge, da wir so die Anzahl der ausgewählten ganzen Zahlen maximieren können. Jedes Mal, wenn wir eine Zahl auswählen, addieren wir sie zur Summe und prüfen, ob sie maxSum überschreitet. Wenn ja, hören Sie auf.
- Effizienzüberlegungen: Da wir über Zahlen von 1 bis n iterieren und prüfen, ob sich jede in der verbotenen Menge befindet (was in konstanter Zeit erfolgen kann), läuft der Ansatz in linearer Zeit relativ zu n und dem Größe der Sperrliste.
Lassen Sie uns diese Lösung in PHP implementieren: 2554. Maximale Anzahl von Ganzzahlen zur Auswahl aus einem Bereich I
<?php /** * @param Integer[] $banned * @param Integer $n * @param Integer $maxSum * @return Integer */ function maxCount($banned, $n, $maxSum) { ... ... ... /** * go to ./solution.php */ } // Test cases echo maxCount([1, 6, 5], 5, 6); // Output: 2 echo "\n"; echo maxCount([1, 2, 3, 4, 5, 6, 7], 8, 1); // Output: 0 echo "\n"; echo maxCount([11], 7, 50); // Output: 7 ?>
Erläuterung:
Verbotenes Array in Satz umwandeln:
Wir verwenden array_flip($banned), um einen Satz aus dem gesperrten Array zu erstellen, der es O(1)-Suchvorgängen ermöglicht, zu überprüfen, ob eine Zahl gesperrt ist.-
Iteriere von 1 bis n:
Wir iterieren durch Zahlen von 1 bis n. Für jede Zahl:- Wenn die Nummer nicht im gesperrten Satz enthalten ist (überprüft mit isset($bannedSet[$i])),
- Und wenn die Addition der Zahl zur Summe maxSum nicht überschreitet,
- Wir schließen diese Zahl ein und aktualisieren die Summe und Zählung.
Zählung zurückgeben:
Nach der Schleife geben wir die Anzahl der ausgewählten Ganzzahlen zurück ($count).$bannedSet = array_flip($banned);: Dies wandelt die gesperrte Liste in einen Satz (assoziatives Array) für schnelle Suchvorgänge um.
for ($i = 1; $i : Wir iterieren über alle ganzen Zahlen von 1 bis n.
if (isset($bannedSet[$i])) { continue; }: Dies prüft, ob die aktuelle Nummer im gesperrten Satz enthalten ist. Wenn ja, überspringen wir es.
if ($sum $i > $maxSum) { break; }: Wenn das Hinzufügen der aktuellen Zahl maxSum überschreitet, stoppen wir den Vorgang.
$sum = $i; $count ;: Wenn die Zahl gültig ist und die Addition maxSum nicht überschreitet, schließen wir sie in unsere Summe ein und erhöhen die Anzahl.
Zeitkomplexität:
- Die Erstellung des verbotenen Satzes (array_flip) ist O(b), wobei b die Länge des verbotenen Arrays ist.
- Die Schleife wird n-mal durchlaufen (für Zahlen von 1 bis n), und jede Suche in der verbotenen Menge dauert O(1) Zeit. Die zeitliche Komplexität der Schleife beträgt also O(n).
- Daher beträgt die Gesamtzeitkomplexität O(n b), was angesichts der Problembeschränkungen effizient ist.
Beispielhafte Vorgehensweise:
Zur Eingabe:
-
Eingabe 1:banned = [1, 6, 5], n = 5, maxSum = 6
- Wir erstellen den verbotenen Satz: {1, 5, 6}.
- Wir durchlaufen die Nummern 1 bis 5:
- 1 ist gesperrt, überspringen Sie es.
- 2 ist nicht verboten, addiere es zur Summe (Summe = 2, Anzahl = 1).
- 3 ist nicht verboten, addieren Sie es zur Summe (Summe = 5, Anzahl = 2).
- 4 ist nicht verboten, aber das Hinzufügen zur Summe würde maxSum (5 4 = 9) überschreiten, also überspringen Sie es.
- Das Ergebnis ist 2.
-
Eingabe 2:banned = [1, 2, 3, 4, 5, 6, 7], n = 8, maxSum = 1
- Alle Zahlen von 1 bis 7 sind gesperrt, daher können keine gültigen Zahlen ausgewählt werden.
- Das Ergebnis ist 0.
-
Eingabe 3:banned = [11], n = 7, maxSum = 50
- Die einzige verbotene Zahl ist 11, die außerhalb des Bereichs 1 bis 7 liegt.
- Wir können alle Zahlen von 1 bis 7 auswählen und ihre Summe beträgt 28, was kleiner als maxSum ist.
- Das Ergebnis ist 7.
Diese Lösung löst das Problem effizient innerhalb der gegebenen Einschränkungen.
Kontaktlinks
Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!
Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:
- GitHub
Das obige ist der detaillierte Inhalt vonMaximale Anzahl auswählbarer Ganzzahlen aus einem Bereich I. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Die Hauptvorteile der Verwendung von Datenbankspeichersitzungen sind Persistenz, Skalierbarkeit und Sicherheit. 1. Persistenz: Auch wenn der Server neu gestartet wird, können die Sitzungsdaten unverändert bleiben. 2. Skalierbarkeit: Anwendbar für verteilte Systeme, um sicherzustellen, dass Sitzungsdaten zwischen mehreren Servern synchronisiert werden. 3. Sicherheit: Die Datenbank bietet verschlüsselten Speicher zum Schutz vertraulicher Informationen.

Das Implementieren der benutzerdefinierten Sitzung in PHP kann durch die Implementierung der SessionHandlerInterface -Schnittstelle durchgeführt werden. Die spezifischen Schritte umfassen: 1) Erstellen einer Klasse, die SessionHandlerInterface wie CustomSessionHandler implementiert; 2) Umschreiben von Methoden in der Schnittstelle (z. B. offen, schließen, lesen, schreiben, zerstören, GC), um die Lebenszyklus- und Speichermethode von Sitzungsdaten zu definieren; 3) Registrieren Sie einen benutzerdefinierten Sitzungsprozessor in einem PHP -Skript und starten Sie die Sitzung. Auf diese Weise können Daten in Medien wie MySQL und Redis gespeichert werden, um Leistung, Sicherheit und Skalierbarkeit zu verbessern.

SessionID ist ein Mechanismus, der in Webanwendungen verwendet wird, um den Benutzersitzstatus zu verfolgen. 1. Es handelt sich um eine zufällig generierte Zeichenfolge, mit der die Identitätsinformationen des Benutzers während mehrerer Interaktionen zwischen dem Benutzer und dem Server aufrechterhalten werden. 2. Der Server generiert und sendet ihn über Cookies- oder URL -Parameter an den Client, um diese Anforderungen in mehreren Anforderungen des Benutzers zu identifizieren und zu verknüpfen. 3. Die Erzeugung verwendet normalerweise zufällige Algorithmen, um Einzigartigkeit und Unvorhersehbarkeit zu gewährleisten. 4. In der tatsächlichen Entwicklung können In-Memory-Datenbanken wie Redis verwendet werden, um Sitzungsdaten zu speichern, um die Leistung und Sicherheit zu verbessern.

Das Verwalten von Sitzungen in staatenlosen Umgebungen wie APIs kann durch Verwendung von JWT oder Cookies erreicht werden. 1. JWT ist für Staatenlosigkeit und Skalierbarkeit geeignet, aber es ist groß, wenn es um Big Data geht. 2. Kookies sind traditioneller und einfacher zu implementieren, müssen jedoch mit Vorsicht konfiguriert werden, um die Sicherheit zu gewährleisten.

Um die Anwendung vor Sitzungsangriffen im Zusammenhang mit den Sitzungen zu schützen, sind folgende Maßnahmen erforderlich: 1. Stellen Sie die HTTPonly- und sicheren Flags ein, um die Sitzungs Cookies zu schützen. 2. Exportcodes für alle Benutzereingaben. 3. Implementieren Sie die Inhaltssicherheitsrichtlinie (CSP), um die Skriptquellen einzuschränken. Durch diese Richtlinien können Sitzungsangriffe im Zusammenhang mit Sitzungen effektiv geschützt und Benutzerdaten sichergestellt werden.

Methoden zur Optimierung der PHP -Sitzungsleistung gehören: 1. Start der Verzögerung der Sitzung, 2. Verwenden Sie Datenbank zum Speichern von Sitzungen, 3. Kompress -Sitzungsdaten, 14. Sitzungslebenszyklus verwalten und 5. Sitzungsfreigabe implementieren. Diese Strategien können die Effizienz von Anwendungen in hohen Parallelitätsumgebungen erheblich verbessern.

Thesession.gc_maxlifetimesettingInphpdeterminesthelifspanofSessionData, setInseconds.1) ItsconfiguredInphp.iniorviaini_Set (). 2) AbalanceIsneedToAvoidPerformanceSandunexexwortedyg -Probablogouts

In PHP können Sie die Funktion Session_name () verwenden, um den Sitzungsnamen zu konfigurieren. Die spezifischen Schritte sind wie folgt: 1. Verwenden Sie die Funktion Session_name (), um den Sitzungsnamen wie Session_name ("my_Session") festzulegen. 2. Nachdem Sie den Sitzungsnamen festgelegt haben, call Session_start (), um die Sitzung zu starten. Das Konfigurieren von Sitzungsnamen kann Sitzungsdatenkonflikte zwischen mehreren Anwendungen vermeiden und die Sicherheit verbessern, aber auf die Einzigartigkeit, Sicherheit, Länge und Festlegen des Zeitpunkts der Sitzungsnamen achten.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),