2016-06-23 2 views
0

Определить максимальное количество последовательных равных элементов в заданном массиве.Определить максимальное количество последовательных равных элементов в заданном массиве

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 

р повторяющихся (ар

+0

Вы хотите определить максимальное количество последовательных равные элементы в заданном массиве? Если это так, ваше первое предложение неверно, и ваш код не имеет значения и, следовательно, вводит в заблуждение. Вам нужно отредактировать вопрос, чтобы уточнить, что вы хотите сделать. –

ответ

0

Это должно работать

def recurring(arr) 
    elements = arr.uniq 
    elements.map { |el| arr.count(el) }.max 
end 
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 
Смежные вопросы