Padrões de dois ponteiros e janelas deslizantes
Padrão 1: Janela constante (como janela = 4 ou algum valor inteiro)
Por exemplo, dada uma matriz de números inteiros (-ve e ve), encontre a soma máxima para a janela contígua de tamanho k.
Padrão 2:(Tamanho variável da janela) Maior subarray/substring com Padrão 3: Número de subarray/substring onde Este problema pode ser resolvido usando o Padrão 2 Isso pode ser dividido em Padrão 4: Encontre a janela mais curta/mínima Abordagens diferentes para o padrão 2: Melhor abordagem usando os dois ponteiros e a janela deslizante Abordagem ideal: Uma abordagem ideal será reduzir apenas a esquerda, desde que o comprimento do subarray seja maior que maxLen quando o subarray não estiver satisfazendo a condição (
Isso é muito difícil de resolver porque fica difícil quando expandir (right ) ou quando encolher (left ).
Para resolver problemas como encontrar o número de substrings onde sum =k.
Exemplo: Maior submatriz com soma
public class Sample{
public static void main(String args[]){
n = 10;
int arr[] = new int[n];
//Brute force approach for finding the longest subarray with sum k) break; /// optimization if the sum is greater than the k, what is the point in going forward?
}
}
//O(n n) in the worst case r will move from 0 to n and in the worst case left will move from 0 0 n as well so 2n
int left = 0;
int right =0;
int sum = 0;
int maxLen = 0;
while(right
Sabemos que se encontrarmos o subarray, armazenamos seu comprimento em maxLen, mas ao adicionar arr[right] se a soma se tornar maior que k, então atualmente estamos diminuindo para a esquerda fazendo sum = sum-arr[left] e fazendo left .
Sabemos que o comprimento máximo atual é maxLen, se continuarmos diminuindo o índice esquerdo, poderemos obter outro subarray que satisfaça a condição ( maxLen, então apenas maxLen será atualizado. int right =0;
int sum = 0;
int maxLen = 0;
while(right
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