确定给定数组中连续相等元素的最大数量

时间:2016-06-23 21:20:13

标签: ruby-on-rails arrays ruby algorithm

确定给定数组中连续相等元素的最大数量。

arr = [1, 1, 1, 1, 1, 2, 3, 3, 3, 4, 4, 1, 1]
def recurring(arr)
    freq = arr.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
    freq.max_by { |k,v| v }
end

重复发生(ar

2 个答案:

答案 0 :(得分:0)

这应该有效

def recurring(arr)
  elements = arr.uniq
  elements.map { |el| arr.count(el) }.max
end

答案 1 :(得分:0)

我假设任务是确定给定数组中连续相等元素的最大数量。

def recurring(arr)
  arr.chunk(&:itself).map { |_,a| a.size }.max
end

arr = [1, 1, 1, 1, 1, 2, 3, 3, 3, 4, 4, 1, 1]
recurring arr
  #=> 5

Object#itself是在Ruby v2.2中引入的。对于早期版本,请写

arr.chunk { |e| e }.map { |_,a| a.size }.max

步骤:

enum = arr.chunk(&:itself)
  #=> #<Enumerator: #<Enumerator::Generator:0x007fbb04943088>:each> 

我们可以看到这个枚举器通过将它转换为数组来生成哪些元素:

enum.to_a
  #=> [[1, [1, 1, 1, 1, 1]], [2, [2]], [3, [3, 3, 3]], [4, [4, 4]], [1, [1, 1]]]

b = enum.map { |_,a| a.size }
  #=> [5, 1, 3, 2, 2] 
b.max
  #=> 5