[Diário de perguntas do pincel] 11. O recipiente que contém mais água

Oferta chega, cavar amigos para pegar! Estou participando do Evento Check-In de Recrutamento da Primavera de 2022, clique para ver os detalhes do evento .

[Diário de perguntas do pincel] 11. O recipiente que contém mais água

O décimo terceiro capítulo deste diário de escrita é intitulado: 11. O recipiente que contém mais água , meio

1. Descrição do tópico:

Como é receber essa pergunta?

Há poucas palavras na descrição do título, e parece ser bastante claro. Não é apenas para calcular a quantidade máxima de água que o recipiente pode conter, mas sinto que quanto mais claro o título é, mais confuso fica será para perceber isso?

Tudo bem pessoal, vamos jogar e analisar

2. Análise de pensamento:

1. Que ideia esta questão examina? Qual é o seu pensamento?

Vamos dar uma olhada em quais informações importantes esta pergunta nos fornece:

  • Uma matriz será fornecida na pergunta e o número de elementos nessa matriz é 2 - 10 elevado à 5ª potência, o que significa que não precisamos julgar se o comprimento da matriz de entrada é menor que 2.
  • Converta a matriz em um recipiente, calcule a largura e a altura e obtenha a quantidade máxima de água que o recipiente pode conter

Isso é um pouco como o efeito do barril , quanta água um barril pode conter depende da prancha mais curta, e aqui, quanta água um recipiente pode conter depende de 2 variáveis

  • a altura do recipiente
  • a largura do recipiente

A necessidade combinada de atingir a altura do contêiner * a largura do contêiner é a maior

Então vamos deduzir:

Exemplo dado usando o título : [1,8,6,2,5,4,8,3,7]

Para esta pergunta, queremos calcular o tamanho máximo da água que o recipiente pode conter, para que possamos usar uma caixa para fazer uma seleção de caixa. Você faria uma seleção de caixa assim? Expanda da esquerda para a direita para a direita para fazer uma seleção de caixa

Pegue a primeira coluna como padrão e expanda para a direita

Omitir os próximos passos...

Pegue a segunda coluna como critério e expanda para a direita

Omitir os próximos passos...

De acordo com o método acima, é possível encontrar a quantidade máxima de água que esperamos encontrar , mas a complexidade de tempo desse método é muito alta e inevitavelmente expirará. Podemos mudar nosso pensamento.

Já que é para encontrar a quantidade máxima de água, podemos começar a partir do limite de dados que pode ser o maior? Não podemos controlar a altura da coluna, mas podemos controlar a largura do contêiner

Portanto, podemos encontrar

  • Diretamente da coluna mais à esquerda e da coluna mais à direita como a borda do contêiner para encolher continuamente até o meio
  • Quando precisar ser dobrado, comece pelo lado mais curto , para que seja mais fácil de entender e o número de ciclos possa ser bastante reduzido.

A figura acima simulou claramente o processo de fechamento de limites, e o resto é que vamos realizar as ideias acima juntos, usando o método de ponteiros duplos

3. Codificação

De acordo com a lógica e análise acima, podemos traduzi-lo no código a seguir. De acordo com o significado da pergunta, não precisamos julgar se o comprimento do array fornecido é menor que 2.

A codificação é a seguinte:

func maxArea(height []int) int {
	// 赋初始值,定位容器的左边界和右边界 (双指针的方法)
    i , j := 0,len(height) - 1

    res := 0
    for i<j {
        // 计算当前边界的容器面积,取决于较矮的一边
        res = max(res,(j-i) * min(height[i],height[j]))
		// 从较短的那一边开始收拢
        if height[i] < height[j]{
            i++
        }else{
            j--
        }
    }
    return res
}

func max(a,b int)int{
    if a>b {
        return a
    }
    return b
}

func min(a,b int)int{
    if a<b {
        return a
    }
    return b
}
复制代码

O código acima é implementado de acordo com a ideia. A ideia é clara. A codificação é um processo de tradução. Considerando vários cenários, podemos implementá-lo de forma mais suave, o que pode reduzir o risco de retrabalho e bugs.

4. Resumo:

Aqui só precisamos percorrer todo o array uma vez, a complexidade de tempo é O(n), e a complexidade do espaço é O(1), porque todos estamos usando o consumo de espaço de nível constante

Endereço do título original: 11. O recipiente que contém mais água

Estou aqui hoje, o que aprendi, se houver algum desvio, por favor me corrija

Bem-vindo a curtir, seguir, favorito

Amigos, seu apoio e incentivo são a motivação para eu persistir em compartilhar e melhorar a qualidade

Ok, aqui é desta vez

A tecnologia é aberta e nossa mentalidade deve ser aberta. Abrace a mudança, viva ao sol e siga em frente.

Eu sou o garotinho demônio Nezha , bem vindos para curtir, seguir e colecionar, até a próxima~

Acho que você gosta

Origin juejin.im/post/7079697653612838948
Recomendado
Clasificación