Мне нравится метод "использовать элементы массива в качестве индексов" из ссылки .
. *1003*.
* алгоритма Algorithmist. Метод 5 (Использование элементов массива в качестве индекса). Спасибо Манишу К. Аасавату за предложениеэтот метод.
traverse the list for i= 1st to n+2 elements
{
check for sign of A[abs(A[i])] ;
if positive then
make it negative by A[abs(A[i])]=-A[abs(A[i])];
else // i.e., A[abs(A[i])] is negative
this element (ith element of list) is a repetition
}
Единственное отличие состоит в том, что здесь он будет проходить от 1 до n.Обратите внимание, что это однопроходное решение, которое не требует дополнительного места (кроме хранения i
)!
Сноска:
Технически оно «крадет» некоторое дополнительное пространство- по сути, это решение массива счетчиков, но вместо выделения своего собственного массива целых чисел он использует знаковые биты исходного массива в качестве счетчиков.