Я должен использовать только внутренний алгоритм линейного поиска, который заключается в следующем:
for (i = 0; i <= 8; i++)
for (j = i + 1; j <= 9; j++)
if (array [i] == array [j])
и с заданным алгоритмом я немного застрял здесь, и я построил это:
#include <iostream>
int main(int argc, const char * argv[]) {
// insert code here...
int i , j;
int array [10];
std::cout << "Please Enter 10 integers: \n" << std::endl;
for (i = 0; i <= 9; i++)
std::cin >> array [i];
for (i = 0; i <= 8; i++)
for (j = i + 1; j <= 9; j++)
if (array [i] == array [j])
std::cout << array [i] << " is repeated in position numbers: " << i << " & " << j << "\n" << std::endl;
return 0;
}
он отлично работает для чисел, которые повторяются дважды или один раз, мне нужно улучшить работу, чтобы улучшить время повторения, любые идеи?
C++ не является моим языком повседневного использования, но вот Идея, как я ее реализую.
Я бы использовал map<int, List<int>>
которая хранит в качестве ключа значения, которые вы видели до сих пор, и как списки значений позиций, в которых вы их видели.
Вы можете просто перебирать в O (n) свой вход и заполнять карту. На лету или в конце в качестве отдельного шага вы можете прочитать карту и вывести числа и позиции всех номеров, которые имеют список размером> = 2 на карте.