„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Subarray mit gegebener Summe in Java mit verschiedenen Ansätzen

Subarray mit gegebener Summe in Java mit verschiedenen Ansätzen

Veröffentlicht am 06.11.2024
Durchsuche:781

Subarray with given sum in Java with different approaches

Das Finden eines Subarrays mit einer bestimmten Summe ist ein häufiges Problem, das häufig bei Codierungsinterviews und Wettbewerbsprogrammen auftritt. Dieses Problem kann mit verschiedenen Techniken gelöst werden, von denen jede ihre eigenen Kompromisse hinsichtlich der zeitlichen und räumlichen Komplexität aufweist. In diesem Artikel untersuchen wir mehrere Ansätze zur Lösung des Problems, ein Subarray mit einer bestimmten Summe in Java zu finden.

Problemstellung

Suchen Sie bei einem gegebenen Array von Ganzzahlen und einer Zielsumme ein kontinuierliches Unterarray im Array, das sich zur angegebenen Summe addiert. Das Problem kann in zwei Hauptvarianten unterteilt werden:

  1. Subarray mit positiven Zahlen: Das Array enthält nur positive Zahlen.
  2. Subarray mit gemischten Zahlen: Das Array enthält sowohl positive als auch negative Zahlen.

Lassen Sie uns verschiedene Methoden zur Lösung dieser Varianten untersuchen.

Ansatz 1: Einsatz brutaler Gewalt

Der Brute-Force-Ansatz beinhaltet die Überprüfung aller möglichen Unterarrays und die Berechnung ihrer Summen, um festzustellen, ob einer von ihnen der Zielsumme entspricht. Dieser Ansatz funktioniert für beide Varianten, ist jedoch aufgrund seiner quadratischen Zeitkomplexität für große Arrays ineffizient.

Durchführung

public class SubarraySumBruteForce {
  public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) {
    int n = arr.length;
    for (int start = 0; start 

Ausgabe

Subarray found from index 1 to 3

Analyse

  • Zeitkomplexität: O(n²) aufgrund der zwei verschachtelten Schleifen, die das Array durchlaufen.
  • Raumkomplexität: O(1), da kein zusätzlicher Raum über das Eingabearray hinaus verwendet wird.

Ansatz 2: Schiebefenster verwenden

Der Schiebefenster-Ansatz ist effizient für Arrays, die nur positive Zahlen enthalten. Bei dieser Technik wird ein Fenster mit Elementen verwaltet, die zusammen die Zielsumme ergeben. Das Fenster wird durch Hinzufügen von Elementen erweitert, bis die Summe das Ziel überschreitet, und durch Entfernen von Elementen vom Anfang verkleinert, bis die Summe kleiner oder gleich dem Ziel ist.

Durchführung

public class SubarraySumSlidingWindow {
  public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) {
    int start = 0;
    int currentSum = 0;

    for (int end = 0; end  targetSum && start 

Ausgabe

Subarray found from index 1 to 3

Analyse

  • Zeitkomplexität: O(n), da jedes Element höchstens zweimal verarbeitet wird.
  • Raumkomplexität: O(1), da kein zusätzlicher Raum benötigt wird.
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://www.tutorialspoint.com/subarray-with-given-sum-in-java-with-different-approaches Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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