我想弄清楚如何找到一個整數數組中最頻繁元素的計數。我可以想到一些可能有用的方法,但是當我在塊內寫入表達式時,我完全喪失瞭如何將元素與下一個元素和上一個元素進行比較。有任何想法嗎?所有的幫助真的很感謝!紅寶石陣列最頻繁元素的數量
1
A
回答
4
一個簡單的方法是確定所有的唯一值,將每個值轉換爲它在數組中的數量,然後確定最大的計數。
def max_count(arr)
arr.uniq.map { |n| arr.count(n) }.max
end
例如:
arr = [1,2,4,3,2,6,3,4,2]
max_count(arr)
#=> 3
有三個步驟:
a = arr.uniq
#=> [1, 2, 4, 3, 6]
b = a.map { |n| arr.count(n) }
#=> [1, 3, 2, 2, 1]
b.max
#=> 3
稍微更有效的方式(因爲arr
元素列舉僅一次)是使用計數hash:
def max_count(arr)
arr.each_with_object(Hash.new(0)) { |n,h| h[n] += 1 }.values.max
end
max_count(arr)
#=> 3
我們:
a = arr.each_with_object(Hash.new(0)) { |n,h| h[n] += 1 }
#=> {1=>1, 2=>3, 4=>2, 3=>2, 6=>1}
b = a.values
#=> [1, 3, 2, 2, 1]
b.max
#=> 3
爲Hash.new(0)
的說明,請參見Hash::new。簡而言之,如果h = Hash.new(0)
和h
沒有密鑰k
,則h[k]
將返回默認值,這裏是零。 h[k] += 1
擴大爲h[k] = h[k] + 1
,所以如果h
沒有密鑰k
,則這將變成h[k] = 0 + 1
。另一方面,如果說,h[k] => 2
,然後h[k] = h[k] + 1 #=> h[k] = 3 + 1
。
相關問題
- 1. 紅寶石組合與陣列元素
- 2. 紅寶石陣列
- 3. 添加元素到紅寶石陣列返回新陣列
- 4. 陣列數組的最頻繁陣列
- 5. 陣列消除元件根據元素的紅寶石
- 6. 陣列中的紅寶石
- 7. 陣列中的紅寶石
- 8. 紅寶石陣列範圍
- 9. 紅寶石陣列切片
- 10. 紅寶石陣列內部
- 11. 紅寶石陣列換行
- 12. 紅寶石發現陣列
- 13. 紅寶石陣列注入
- 14. 紅寶石陣列減法?
- 15. 兩個紅寶石陣列
- 16. 紅寶石:生成陣列
- 17. 紅寶石:從陣列
- 18. 紅寶石YAML陣列
- 19. 拼合紅寶石陣列
- 20. 紅寶石從陣列
- 21. 紅寶石嵌套陣列
- 22. 轉換陣列,紅寶石
- 23. 紅寶石:在陣列
- 24. 合併紅寶石陣列
- 25. 紅寶石 - 陣列弄平
- 26. 紅寶石陣列平等
- 27. 紅寶石陣列麻煩
- 28. 紅寶石陣列,[]操作
- 29. 紅寶石陣列打印
- 30. 紅寶石陣列值
這個問題是重複的,這並不奇怪。然而,不清楚哪個問題是重複的。我讀到的問題是最大數量將被返回(「...如何找到數組中最頻繁元素的數量...」)。 (請參閱@Tadman對我的回答的評論。)「這個問題在這裏已經有了答案:」要求計數最大的元素。當然,從獲得最大計數的問題的答案來看,這是一個非常短的步驟,但如果只需要最大計數,可能會有更好的方法。 –