我正在试图找出如何在整数数组中找到最频繁元素的计数。我可以想到一些可能有用的方法但是当我在块中编写表达式时,我完全迷失了如何将元素与下一个元素和前一个元素进行比较。有任何想法吗?真的非常感谢所有的帮助!
答案 0 :(得分:4)
一个简单的方法是确定所有唯一值,将每个值转换为数组中的计数,然后确定最大计数。
$yourHtmlField.rules( "add", {
required: true,
messages: {
required: "Required input"
}
});
例如:
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
我们有:
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。简而言之,如果Hash.new(0)
和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
。