Encontrar um subarray com uma determinada soma é um problema comum que frequentemente aparece na codificação de entrevistas e na programação competitiva. Este problema pode ser resolvido usando várias técnicas, cada uma com suas próprias compensações em relação à complexidade do tempo e da complexidade do espaço. Neste artigo, exploraremos várias abordagens para resolver o problema de encontrar um subarray com uma determinada soma em Java.
Dada uma matriz de números inteiros e uma soma alvo, encontre uma submatriz contínua na matriz que soma a soma fornecida. O problema pode ser dividido em duas variantes principais:
Vamos explorar diferentes métodos para resolver essas variantes.
A abordagem de força bruta envolve verificar todas as submatrizes possíveis e calcular suas somas para ver se alguma delas é igual à soma alvo. Essa abordagem funciona para ambas as variantes, mas é ineficiente para matrizes grandes devido à sua complexidade de tempo quadrática.
public class SubarraySumBruteForce { public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) { int n = arr.length; for (int start = 0; startSaída
Subarray found from index 1 to 3Análise
A abordagem da janela deslizante é eficiente para matrizes contendo apenas números positivos. Esta técnica envolve a manutenção de uma janela de elementos que somam a soma desejada. A janela é expandida adicionando elementos até que a soma exceda o alvo, e contraída removendo elementos desde o início até que a soma seja menor ou igual ao alvo.
public class SubarraySumSlidingWindow { public static int[] findSubarrayWithGivenSum(int[] arr, int targetSum) { int start = 0; int currentSum = 0; for (int end = 0; end targetSum && startSaída
Subarray found from index 1 to 3Análise
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3