2015-10-28 3 views
0

У меня есть простая алгоритмическая проблема, с которой я как-то сейчас борется. А именно, у меня есть данные, такие как:Найти ряд следующих чисел

[('standby', [16, 17]), 
('unavailable', [15, 18, 19, 20]), 
('work', [7, 8, 9, 10, 12, 13])] 

, и я хочу, чтобы заменить его серии следующих номеров для каждого:

['standby', '16 - 17'], 
['unavailable', '15'], 
['unavailable', '18 - 20'], 
['work', '7 - 10'], 
['work', '12 - 13'], 

Может кто-нибудь мне точку в правильном направлении?

Заранее спасибо.

+4

что вы пробовали? – sashas

+0

@sasha Я пробовал перебирать список и сравнивать число со следующим, аналогично тому, что предлагал vrachlin –

+0

я ответил на ваш вопрос? – vrachlin

ответ

0

очень простой алгоритм o (n), передайте следующие цифры, пока они не последуют, сохраните как XX - XX, затем продолжите передачу остатка до конца.

findFollowingNumbers (numberArr, i) : 

first = numberArr[i] 
while (numberArr[i] + 1 == numberArr[i+1] || i == numberArr.length - 1) 
    i++ 
last = numberArr[i] 
//save somewhere as first + " - " + last 
findFollowingNumbers(numberArr, i) 

где numberArr = [16, 17], например, и первый звонок будет findFollowingNumbers(numberArr, 0)

Смежные вопросы