Вам, кажется, нужны повторные значения границ, не так ли? Вот функциональный подход в качестве примера. Это O (n), поэтому, как отмечают другие, лучше использовать алгоритм деления пополам O (log (n)), если у вас большие входные массивы (примечание: проверяемое значение должно быть между xs.min
и xs.max
):
xs = [10,42,45,45,61,61,75,90,1240]
chk_pairs = xs.chunk { |x| x }.each_cons(2)
boundaries = chk_pairs.detect { |_, (y, ys)| y > 59 }.flat_map { |x, xs| xs }
#=> [45, 45, 61, 61]