Elixir Queue: Fixing `queue.pop/1` Error in `halve_array` Function
The error message 'queue.pop/1 is undefined or private' indicates that the queue.pop/1 function is not available in the Elixir :queue module. Instead of pop/1, you should use the :queue.out/1 function to remove the first element from the queue.
Here's the corrected code:
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, pq} = :queue.out(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
By replacing queue.pop(pq) with :queue.out(pq), you can correctly remove and retrieve the first element of the queue, ensuring the function operates as intended. This corrected code will resolve the error and enable your halve_array function to work properly.
原文地址: https://www.cveoy.top/t/topic/p0vE 著作权归作者所有。请勿转载和采集!