按相应的范围对数组进行排序

时间:2017-05-30 09:48:35

标签: arrays ruby algorithm

我的目的是填充list

中的数组
list = [-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 12, 13, 15]

按照以下顺序:

  • 未跟随其递增值(按1)的单个整数将直接添加到结果数组中。
  • 后跟其递增值(乘以1)的整数将被添加到范围数组中,然后该数组将被添加到结果中,并将再次重置以用于下一个范围。

正确的输出应该是:

solution(list)
# => [-6, [-3, -2, -1, 0, 1], [3, 4, 5], [7, 8, 9, 10], [12, 13], 15]  

我的代码和输出如下。

def solution(list)
  result = []
  idx = 0
  loop do
    range = []
    loop do
      if list[idx+1] - list[idx] == 1
        range << list[idx]
        idx += 1
      else
        result << list[idx]
        idx += 1
        break
      end
    end
    result << range
  break if idx == list.size - 1
  end
  result
end 

solution(list)
# => [-6, [], 1, [-3, -2, -1, 0], 5, [3, 4], 10, [7, 8, 9], 13, [12]]

代码不正确。你能告诉我我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

你错过了chunk_while

list.chunk_while{|a, b| a.next == b}.map{|a| a.one? ? a.first : a}
# => [-6, [-3, -2, -1, 0, 1], [3, 4, 5], [7, 8, 9, 10], [12, 13], 15]