在Elixir中没有while关键字,因此无法使用while循环。您可以使用递归来实现类似的功能。下面是修改后的代码:

defmodule Solution do
  @spec halve_array(nums :: [integer]) :: integer
  def halve_array(nums) do
    pq = :queue.new()
    Enum.each(nums, fn num -> :queue.in(num, pq) end)
    res = 0
    sum = Enum.reduce(nums, 0.0, &(&1 + &2))
    sum2 = 0.0
    halve_array_recursive(pq, sum, sum2, res)
  end

  defp halve_array_recursive(pq, sum, sum2, res) do
    case sum2 < sum / 2 do
      true ->
        x = :queue.peek(pq)
        pq = :queue.pop(pq)
        sum2 = sum2 + x / 2
        pq = :queue.in(x / 2, pq)
        res = res + 1
        halve_array_recursive(pq, sum, sum2, res)
      false ->
        res
    end
  end
end

这样,代码将使用递归来模拟while循环的行为

defmodule Solution do spec halve_arraynums integer integer def halve_arraynums do pq = queuenew Enumeachnums fn num - queueinnum pq end res = 0 sum = Enumreducenums 00 &&1 + &2 sum2

原文地址: https://www.cveoy.top/t/topic/iik3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录