arrays – 如何返回数组中的第三个最大数字
发布时间:2020-12-17 01:54:42 所属栏目:百科 来源:网络整理
导读:我回答编程问题的代码逻辑是: 找到输入数组中的最大数字. 将该号码存储在新阵列中. 从输入数组中删除该数字. 重复#1-3,直到我在新数组中有三个元素. 选择要返回的数组的最后一个元素. 我的代码返回三个10,而不是数组中的三个最大元素,10,8和4.我认为这可能
我回答编程问题的代码逻辑是:
>找到输入数组中的最大数字. 我的代码返回三个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产品,那么使用 def three_greatest(list) list.max(3) end 这里要学到的教训是,Enumerable库与机械工具箱不同,它拥有大量有用的工具.重要的是要花一些时间来至少阅读那里的内容,这样你就不会浪费时间重新发明已经存在于优雅形式的东西. 换句话说,在解决问题时,请检查问题是否已经解决.在许多情况下,你会发现有一种工具可以完全满足您的需求. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |