suchen
HeimBackend-EntwicklungPHP-TutorialMaximale Anzahl auswählbarer Ganzzahlen aus einem Bereich I

Maximum Number of Integers to Choose From a Range I

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:

  1. Behalten Sie die verbotenen Zahlen, die kleiner als n sind, in einem Satz.
  2. Schleifen Sie die Zahlen von 1 bis n durch und verwenden Sie sie, wenn die Zahl nicht gesperrt ist.
  3. 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:

  1. 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.
  2. 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.
  3. 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:

  1. Gesperrte Nummern ausschließen: Wir verfolgen die gesperrten Nummern in einem Satz (oder einem assoziativen Array) für eine schnelle Suche.
  2. 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.
  3. 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:

  1. 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.

  2. 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.
  3. Zählung zurückgeben:

    Nach der Schleife geben wir die Anzahl der ausgewählten Ganzzahlen zurück ($count).

  4. $bannedSet = array_flip($banned);: Dies wandelt die gesperrte Liste in einen Satz (assoziatives Array) für schnelle Suchvorgänge um.

  5. for ($i = 1; $i : Wir iterieren über alle ganzen Zahlen von 1 bis n.

  6. if (isset($bannedSet[$i])) { continue; }: Dies prüft, ob die aktuelle Nummer im gesperrten Satz enthalten ist. Wenn ja, überspringen wir es.

  7. if ($sum $i > $maxSum) { break; }: Wenn das Hinzufügen der aktuellen Zahl maxSum überschreitet, stoppen wir den Vorgang.

  8. $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:

  • LinkedIn
  • 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!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Was sind die Vorteile der Verwendung einer Datenbank zum Speichern von Sitzungen?Was sind die Vorteile der Verwendung einer Datenbank zum Speichern von Sitzungen?Apr 24, 2025 am 12:16 AM

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.

Wie implementieren Sie eine benutzerdefinierte Sitzung in PHP?Wie implementieren Sie eine benutzerdefinierte Sitzung in PHP?Apr 24, 2025 am 12:16 AM

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.

Was ist eine Sitzungs -ID?Was ist eine Sitzungs -ID?Apr 24, 2025 am 12:13 AM

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.

Wie gehen Sie mit Sitzungen in einer staatenlosen Umgebung (z. B. API) um?Wie gehen Sie mit Sitzungen in einer staatenlosen Umgebung (z. B. API) um?Apr 24, 2025 am 12:12 AM

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.

Wie können Sie vor SPRECTS-Angriffen (XSS) schützen?Wie können Sie vor SPRECTS-Angriffen (XSS) schützen?Apr 23, 2025 am 12:16 AM

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.

Wie können Sie die PHP -Sitzungsleistung optimieren?Wie können Sie die PHP -Sitzungsleistung optimieren?Apr 23, 2025 am 12:13 AM

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.

Wie lautet die Konfigurationseinstellung von Session.gc_maxlifetime?Wie lautet die Konfigurationseinstellung von Session.gc_maxlifetime?Apr 23, 2025 am 12:10 AM

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

Wie konfigurieren Sie den Sitzungsnamen in PHP?Wie konfigurieren Sie den Sitzungsnamen in PHP?Apr 23, 2025 am 12:08 AM

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.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

SublimeText3 Englische Version

SublimeText3 Englische Version

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

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

mPDF

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),