我有一個數組a = [3,6,774,24,56,2,64,56,34]
。我需要使用Ruby在單次迭代中找到第二大數字。我如何實現它?在Ruby中查找數組中的第二大數字
回答
簡單:你做
array.sort[-2]
而且:)
sort
可能是矯枉過正這裏,特別是對於真正的大陣列。不太明白「單一迭代」,你的意思是?
a = [3,6,774,24,56,2,64,56,34]
b = a.shift(2).sort
c =
a.inject(b) do |(m2, m), e|
case
when e > m
[m, e]
when e > m2
[e, m]
else
[m2, m]
end
end
c.first #=> 64
我猜OP的意思是O(n)。 – Jan 2011-12-17 14:56:54
我只是在學習ruby。那麼這個m2,m和e包含什麼值?我從教程中瞭解到,e將包含數組中每個元素的值..但(m2,m)有點令人困惑...... – rubyist 2011-12-17 16:07:06
如果您通過'[a,b],c'來調用解構塊| do |(x,y),z | ...結束,然後'a - > x,b - > y,c - > z'。在我的代碼中''b''是一個像'[a,b]'這樣的兩個元素數組(因爲塊也返回了兩個元素數組,所以它會在下一步中進行備忘)。 – 2011-12-17 16:31:55
只是爲了好玩,此方法在一個枚舉的第N個最大的價值(你會使用對開模塊,以使插入acc
更有效)。正如@Victor所指出的那樣,當數組的長度比n大得多時,你只能使用它,另外一個簡單的array.sort[-n]
更快。
module Enumerable
def max_nth(n)
inject([]) do |acc, x|
(acc + [x]).sort[[acc.size-(n-1), 0].max..-1]
end.first
end
end
p [1, 5, 2, 32, 2, 41, 15, 55].max_nth(2) #=> 41
我也有這個想法,但這裏有一個皺紋。當n <<數組大小時它可能工作正常,但在其他情況下'sort'可以更好地工作。所以當你說「通用」時,這有點誤導。 – 2011-12-18 00:32:54
@維克多。的確,這更適合n << array_size。但我認爲,在實際情況下,情況就是如此。無論如何,它比使用條件代碼少。 – tokland 2011-12-18 09:35:49
這工作,但我不知道對於 「單次迭代」
a.max(2)[1]
它也能工作:
arr.sort.reverse[1]
- 1. 數組中的第二大數字
- 2. 在函數中包含負數以查找數組中的第二大整數
- 3. 如何查找對象數組中的第二大元素
- 4. 查找數組中第二大甚至int的有效方法
- 5. 查找二維數組中的最大數字索引
- 6. 在排序中查找第n個數組中最大的數字?
- 7. 從java中的整數數組中獲得最大和第二大的數字?
- 8. 在Ruby中查找哈希數組中的最大值
- 9. 在數組中找到第二個最大值
- 10. 查找字符串的二維數組中的字符串數
- 11. 在數組中查找最大整數?
- 12. 試圖在Ruby中查找數組中最長的字符串
- 13. 查找數組中的最大分數
- 14. 如何查找數組集合中第二大元素的索引?
- 15. 查找數組中的最小值和第二小值Java
- 16. 如何在prolog中查找二維數組中的最大數量?
- 17. 查找二維數組中的點
- 18. SQL Server 2008 R2:查找表中第二大數
- 19. 在不使用數組的情況下查找第二高的數字
- 20. Array公式要查找第二個最大數字
- 21. 檢查第一個數組中的值是否在第二個數組中,然後創建第三個數組
- 22. Ruby - 查找數組中第三大值 - 需要幫助理解方法。
- 23. 在java中查找最大數組
- 24. 如何在Java中使用數組查找最大數字?
- 25. 查找二維數組中的最大值
- 26. 查找二維數組中的最大單詞
- 27. Ruby:在字符串數組中查找日期
- 28. 查找int數組中的第n個最大值
- 29. 查找數組中的特殊數字
- 30. 查找數組中缺失的數字
這不是一個單一的迭代:) – Jan 2011-12-17 11:36:26
數組中的值是動態填充的。所以我們不知道數組中的值。在這種情況下,我們將如何迭代並找到第二大值 – rubyist 2011-12-17 11:38:33
如果您不知道哪種對象存在並且無法排序,則無法知道最大值是多少。您的對象必須定義某種順序,最好的解決方案是實現** <=> **方法幷包含** Comparable **模塊。 – 2011-12-17 11:41:30