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.
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:
Lassen Sie uns verschiedene Methoden zur Lösung dieser Varianten untersuchen.
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.
public class SubarraySumBruteForce { public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) { int n = arr.length; for (int start = 0; startAusgabe
Subarray found from index 1 to 3Analyse
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.
public class SubarraySumSlidingWindow { public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) { int start = 0; int currentSum = 0; for (int end = 0; end targetSum && startAusgabe
Subarray found from index 1 to 3Analyse
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