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~