Я работал над одной проблемой:PHP: количество последовательных элементов в массиве
Найти самую большую группу последовательных чисел в массиве.
Скажем, у нас есть массив [5, 43, 4, 56, 3, 2, 44, 57, 58, 1]
, самая большая группа последовательных чисел в этом массиве - 5 (1, 2, 3, 4 и 5).
Алгоритм решения должен быть временной сложностью O (n).
Я решил это со следующим кодом ruby, но мне трудно переносить его на PHP по мере необходимости.
arr = [8, 13, 14, 10, 6, 7, 8, 14, 5, 3, 5, 2, 6, 7, 4]
result = []
stage = []
for i in arr:
if len(stage) > 0 and i != stage[-1]+1:
if len(stage) > 1:
result.append(stage)
stage = []
stage.append(i)
print result
а/код не делать то, что говорит ваше описание. b/сложность o (n) для того, что вы описываете, я не могу. (У меня нет официального доказательства этого, но я не вижу, как это возможно до сих пор) (на самом деле, возможно) – njzk2
Я бы также добавил asort массива, чтобы получить номер массива по возрастанию. И в конце я бы получил массив результатов чисел> и проверил для большого массива в результате –
, если вы отсортируете элементы, у вас будут дубликаты, а ваши сложности перейдут на o (nlogn) – njzk2