gpt4 book ai didi

arrays - 如何返回数组中第三大的数

转载 作者:数据小太阳 更新时间:2023-10-29 07:40:22 25 4
gpt4 key购买 nike

我回答编程问题的代码逻辑是:

  1. 找到输入数组中最大的数字。
  2. 将该数字存储在一个新数组中。
  3. 从输入数组中删除该数字。
  4. 重复 # 的 1-3 直到新数组中有三个元素。
  5. 选择要返回的数组的最后一个元素。

我的代码返回三个 10,而不是数组中的三个最大元素 10、8 和 4。我认为这可能是因为一旦内部 while 循环完成,代码就无法返回它?

我的测试代码是:

puts(third_greatest([8, 1, 10, 4])).to_s

我的代码是:

def third_greatest(nums)
greatest_number = nil
three_greatest = []

three_greatest_idx = 0

while three_greatest_idx < 3
number_idx = 0

while number_idx < nums.length
current_number = nums[number_idx]

if greatest_number == nil
greatest_number = current_number
elsif greatest_number < current_number
greatest_number = current_number
end

number_idx += 1
end

three_greatest.unshift(greatest_number)
nums.delete(greatest_number)
three_greatest_idx += 1
end

return three_greatest
end

最佳答案

一旦您开始考虑使用 Ruby 方式解决此类问题,我的意思是更多地依赖 Enumerable并将您的意图表达为一系列简单的操作,通常链接在一起,然后更容易找到解决方案。

例如,要在任意数组中找到三个最大的数字,显而易见的解决方案可能是这样的:

def three_greatest(list)
list.sort.reverse.first(3)
end

对列表进行排序,默认情况下是从低到高,然后反转它,从高到低。最后一个操作是把前三整复制出来。这似乎很合理,因为它非常清楚地表达了您的意图并且效果很好。

问题是,如果您更仔细地查看 Enumerable 产品,就会发现使用 max 的解决方案甚至更简单:

def three_greatest(list)
list.max(3)
end

这里要吸取的教训是,Enumerable 库与机械师的工具箱并无二致,它拥有大量有用的工具。至少花一些时间通读其中的内容很重要,这样您就不会浪费时间重新发明已经以优雅形式存在的东西。

换句话说,在解决问题时,检查问题是否已经解决。在许多情况下,您会发现有一种工具可以完全满足您的需求。

关于arrays - 如何返回数组中第三大的数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41879120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com