Меня смущает, почему это не проблема O (n): просто переберите значения с индексом i
и позвольте другому индексу j
отстать, чтобы он всегда был на уровне или раньше значения назадв списке, значение которого как минимум X
меньше текущего A[i]
.Для каждого значения A[i]
загляните назад на A[j]
и посмотрите, является ли разница точно X
, и если да, то запомните эту пару i,j
.Затем продвиньтесь j
, если необходимо, чтобы A[j+1]
находился в пределах X
от A[i]
, и вернитесь к вершине цикла.
Редактировать: Никита РыбакСовершенно верно, что я пропустил> = в задаче, но это только значительно упрощает задачу: вместо сопоставления значений j
для данного i
, являющегося диапазоном с остановом и началом, все, что нам нужно, это одинграницу, потому что если, например, A[6] - A[4] >= X
, то, очевидно, то же самое будет справедливо для A[6]
и всего, начиная с A[3]
и далее.