October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run ScanOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk3 min

Como resolver “Distribute Candies Among Children II” em Elixir

Conte as distribuições do LeetCode 2929 fixando a quantidade da primeira criança e calculando o intervalo válido para a segunda, com uma implementação recursiva em Elixir.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A forma mais direta é fixar quantas balas a primeira criança recebe e contar os valores válidos para a segunda; o que sobrar vai para a terceira. Para o LeetCode 2929, isso produz uma solução em tempo O(min(n, limit)) e espaço O(1), sem precisar enumerar cada distribuição. A assinatura exigida pelo juiz para Elixir não está estabelecida nas fontes consultadas, então confirme-a no ambiente antes de enviar.

O que o problema está contando

O LeetCode 2929 pede o número de maneiras de distribuir n balas idênticas entre três crianças distintas, de modo que nenhuma receba mais que limit. Cada criança pode receber de zero até limit, inclusive. Como as crianças são distintas, trocar quem recebe uma quantidade pode gerar uma distribuição diferente: para n = 5 e limit = 2, por exemplo, contam-se separadamente (1, 2, 2), (2, 1, 2) e (2, 2, 1). O enunciado oficial traz esse resultado, além de n = 3, limit = 3, cuja resposta é 10, e as restrições 1 ≤ n, limit ≤ 10^6 (enunciado oficial).

As an Amazon Associate I earn from qualifying purchases.

Como contar sem gerar cada distribuição

Chame de i a quantidade da primeira criança, de j a da segunda e de k a da terceira. Depois de escolher i, restam n - i balas para as duas crianças restantes, então k = n - i - j. Para respeitar os limites, j precisa ser grande o suficiente para que k não passe de limit, e pequeno o suficiente para que nem j nem k sejam negativos ou excedam o limite:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

max(0, n - i - limit) ≤ j ≤ min(limit, n - i)

Assim, para cada i entre zero e min(n, limit), a quantidade de escolhas para j é max(0, superior - inferior + 1). O +1 é importante porque os extremos do intervalo também são válidos. Somar essas contagens cobre todas as distribuições exatamente uma vez. Essa enumeração dos limites é também apresentada na solução publicada do CodeJeet.

Implementação em Elixir

Uma implementação recursiva com acumulador evita criar listas ou manter estado mutável. O intervalo do laço inclui zero e min(n, limit); em cada passo, o acumulador recebe a quantidade de valores possíveis para a segunda criança.

defmodule Solution do
  def distribute_candies(n, limit) do
    max_i = min(n, limit)
    count(0, max_i, n, limit, 0)
  end

  defp count(i, max_i, _n, _limit, total) when i > max_i do
    total
  end

  defp count(i, max_i, n, limit, total) do
    remaining = n - i
    low = max(0, remaining - limit)
    high = min(limit, remaining)
    choices = max(0, high - low + 1)

    count(i + 1, max_i, n, limit, total + choices)
  end
end

O módulo e o nome da função acima são ilustrativos. A página oficial consultada define o problema, mas não estabelece uma assinatura específica para Elixir; ajuste o nome, a visibilidade e a convenção de retorno ao formato pedido pelo juiz online. Os limites de entrada chegam a 10^6. Em Elixir, inteiros são de precisão arbitrária, portanto a implementação não depende de aritmética de inteiro fixo para esses valores.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Complexidade e alternativa de inclusão-exclusão

A enumeração executa no máximo min(n, limit) + 1 iterações e usa espaço constante, além da pilha de chamadas recursivas. Se preferir evitar recursão profunda, a mesma soma pode ser implementada com Enum.reduce sobre o intervalo; isso não muda a contagem, embora crie o intervalo enumerável.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Também é possível começar pelo número de soluções não negativas de x₁ + x₂ + x₃ = n, contado por estrelas e barras, e subtrair as soluções em que uma ou mais crianças excedem limit, alternando os sinais conforme inclusão-exclusão. Uma formulação publicada pelo WalkCCC expressa essa estratégia em quantidade constante de operações. Ela pode ser mais rápida em termos assintóticos, mas requer cuidado ao definir os termos combinatórios e tratar as condições de borda; a enumeração torna os limites individuais visíveis no próprio código. Não há benchmark em Elixir que justifique afirmar uma vantagem prática entre elas.

Verificações úteis

  • Para n = 5 e limit = 2, o laço considera i = 0, 1, 2; a soma resulta em 3.
  • Para n = 3 e limit = 3, todos os valores de i de zero a três são considerados e a soma resulta em 10.
  • Se n > 3 × limit, a distribuição é impossível e o resultado deve ser zero. A fórmula também chega a esse resultado: para cada i possível, o intervalo válido para j fica vazio.
  • Não comece i em um: uma criança pode receber zero. Também não esqueça o +1 ao contar os extremos inclusivos de j.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.