Trouver un sous-tableau avec une somme donnée est un problème courant qui apparaît souvent lors des entretiens de codage et de la programmation compétitive. Ce problème peut être résolu à l’aide de diverses techniques, chacune avec ses propres compromis en termes de complexité temporelle et spatiale. Dans cet article, nous explorerons plusieurs approches pour résoudre le problème de la recherche d'un sous-tableau avec une somme donnée en Java.
Étant donné un tableau d'entiers et une somme cible, recherchez un sous-tableau continu dans le tableau dont la somme correspond à la somme donnée. Le problème peut être divisé en deux variantes principales :
Explorons différentes méthodes pour résoudre ces variantes.
L'approche par force brute consiste à vérifier tous les sous-tableaux possibles et à calculer leurs sommes pour voir si l'un d'entre eux est égal à la somme cible. Cette approche fonctionne pour les deux variantes mais est inefficace pour les grands tableaux en raison de sa complexité temporelle quadratique.
public class SubarraySumBruteForce { public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) { int n = arr.length; for (int start = 0; startSortir
Subarray found from index 1 to 3Analyse
L'approche par fenêtre glissante est efficace pour les tableaux contenant uniquement des nombres positifs. Cette technique consiste à maintenir une fenêtre d'éléments qui totalisent la somme cible. La fenêtre est agrandie en ajoutant des éléments jusqu'à ce que la somme dépasse l'objectif, et réduite en supprimant des éléments depuis le début jusqu'à ce que la somme soit inférieure ou égale à l'objectif.
public class SubarraySumSlidingWindow { public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) { int start = 0; int currentSum = 0; for (int end = 0; end targetSum && startSortir
Subarray found from index 1 to 3Analyse
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3