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
在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循环的行为
原文地址: https://www.cveoy.top/t/topic/iik3 著作权归作者所有。请勿转载和采集!