如何在阵列中找到间隙?

时间:2017-09-11 16:09:02

标签: arrays ruby

我正在使用Ruby 2.4。如果我有一个有序的数字数组,请说

[1, 2, 4, 7, 8, 9]

如何找到数组中不存在的数值元素,数组中最小值和最大值之间的数值?例如,在上面,缺失值是

[3, 5, 6]

如果我的阵列是

[2, 7]

我要找的缺失值是

[3, 4, 5, 6]

2 个答案:

答案 0 :(得分:6)

从预期的数字范围中删除现有数字:

(numbers.first..numbers.last).to_a - numbers

答案 1 :(得分:2)

如果您更喜欢复杂的解决方案:

[1, 2, 4, 7, 8, 9].chunk_while { |a, b| a + 1 == b }
                  .each_cons(2)
                  .flat_map { |x, y| (x.last + 1).upto(y.first - 1).to_a }
#=> [3, 5, 6]