Encontrar un subarreglo con una suma determinada es un problema común que aparece a menudo en entrevistas de codificación y programación competitiva. Este problema se puede resolver utilizando varias técnicas, cada una con sus propias compensaciones con respecto a la complejidad del tiempo y la complejidad del espacio. En este artículo, exploraremos múltiples enfoques para resolver el problema de encontrar un subarreglo con una suma determinada en Java.
Dada una matriz de números enteros y una suma objetivo, encuentre una submatriz continua en la matriz que sume la suma dada. El problema se puede dividir en dos variantes principales:
Exploremos diferentes métodos para resolver estas variantes.
El enfoque de fuerza bruta implica verificar todos los subarreglos posibles y calcular sus sumas para ver si alguno de ellos es igual a la suma objetivo. Este enfoque funciona para ambas variantes, pero es ineficaz para matrices grandes debido a su complejidad de tiempo cuadrático.
public class SubarraySumBruteForce { public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) { int n = arr.length; for (int start = 0; startProducción
Subarray found from index 1 to 3Análisis
El enfoque de ventana deslizante es eficiente para matrices que contienen solo números positivos. Esta técnica implica mantener una ventana de elementos que suman la suma objetivo. La ventana se expande agregando elementos hasta que la suma excede el objetivo y se contrae eliminando elementos desde el principio hasta que la suma es menor o igual al objetivo.
public class SubarraySumSlidingWindow { public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) { int start = 0; int currentSum = 0; for (int end = 0; end targetSum && startProducción
Subarray found from index 1 to 3Análisis
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3