我有一個數組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. C在數組中找到第二大數字
- 3. 在函數中包含負數以查找數組中的第二大整數
- 4. 找到第二大數字?
- 5. 如何查找對象數組中的第二大元素
- 6. 查找數組中第二大甚至int的有效方法
- 7. 查找二維數組中的最大數字索引
- 8. 如何找到數字中的第二大數字? Python
- 9. 查找多行字符串數組中的第二個單詞
- 10. 第二大數組
- 11. 在ruby中查找數組中最小的未使用數字?
- 12. 在Ruby中查找數組中兩個數字的總和
- 13. 在數組中查找第一個和第二個?
- 14. 在Java中查找一組數字的第二個最小值和第二個最大值
- 15. 在排序中查找第n個數組中最大的數字?
- 16. 在列中查找第二大條目
- 17. 在表中查找第二最大
- 18. 在Ruby中查找哈希數組中的最大值
- 19. 從java中的整數數組中獲得最大和第二大的數字?
- 20. 在swift中查找二維數組中的最大元素
- 21. 查找給定數組中的第三大偶數分數
- 22. 使用遞歸在數組中尋找第二大元素
- 23. 在數組中找到第二個最大值
- 24. 查找字符串的二維數組中的字符串數
- 25. Java-查找二維數組中的最大數
- 26. 在數組中查找最大整數?
- 27. 試圖在Ruby中查找數組中最長的字符串
- 28. 如何在Ruby中查找數組中的特定字符
- 29. 在數字列表中找到第二大
- 30. Ruby數組的二維數組,搜索/查找?
這不是一個單一的迭代:) – Jan 2011-12-17 11:36:26
數組中的值是動態填充的。所以我們不知道數組中的值。在這種情況下,我們將如何迭代並找到第二大值 – rubyist 2011-12-17 11:38:33
如果您不知道哪種對象存在並且無法排序,則無法知道最大值是多少。您的對象必須定義某種順序,最好的解決方案是實現** <=> **方法幷包含** Comparable **模塊。 – 2011-12-17 11:41:30