Я считаю, что мой код работает в одном сценарии и прерывается в другом для проблемы Leetcode # 501 из-за пробелов в моем понимании концепций рекурсии и передачи по ссылке в Ruby.
Использование переменных экземпляра работает следующий код:
def find_mode(root)
return [] if root.nil?
@modes = []
@counter = 1
@max = 0
@prev = nil
inorder(root)
@modes
end
def inorder(node)
return if node.nil?
inorder(node.left)
if !@prev.nil?
if @prev.val == node.val
@counter += 1
else
@counter = 1
end
end
if @counter > @max
@max = @counter
@modes = [node.val]
elsif @counter == @max
@modes << node.val
end
@prev = node
inorder(node.right)
end
Однако следующая альтернативная версия не работает. Вместо этого время ожидания истекает.
def find_mode(root)
return [] if root.nil?
modes = []
counter = 1
max = 0
prev = nil
inorder(root, modes, prev, counter, max)
modes
end
def inorder(node, modes, prev, counter, max)
return if node.nil?
inorder(node.left, modes, node, counter, max)
if !prev.nil?
if prev.val == node.val
counter += 1
else
counter = 1
end
end
if counter > max
max = counter
modes = [node.val]
elsif counter == max
modes << node.val
end
prev = node
inorder(node.right, modes, node, counter, max)
end
Что я не понимаю во втором подходе?