加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

arrays – 如何返回数组中的第三个最大数字

发布时间:2020-12-17 01:54:42 所属栏目:百科 来源:网络整理
导读:我回答编程问题的代码逻辑是: 找到输入数组中的最大数字. 将该号码存储在新阵列中. 从输入数组中删除该数字. 重复#1-3,直到我在新数组中有三个元素. 选择要返回的数组的最后一个元素. 我的代码返回三个10,而不是数组中的三个最大元素,10,8和4.我认为这可能
我回答编程问题的代码逻辑是:

>找到输入数组中的最大数字.
>将该号码存储在新阵列中.
>从输入数组中删除该数字.
>重复#1-3,直到我在新数组中有三个元素.
>选择要返回的数组的最后一个元素.

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

我的测试代码是:

puts(third_greatest([8,1,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

对列表进行排序,默认情况下从最低到最高,然后将其反转,使其从最高到最低.最后一个操作是复制前三个entires.这看起来非常合理,因为它非常清楚地表达了您的意图并且运作良好.

问题是如果你仔细观察Enumerable产品,那么使用max就更容易解决:

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

这里要学到的教训是,Enumerable库与机械工具箱不同,它拥有大量有用的工具.重要的是要花一些时间来至少阅读那里的内容,这样你就不会浪费时间重新发明已经存在于优雅形式的东西.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读