#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector< int > number;
bool numbersAreCorrect = false;
int input;
while( cin >> input )
number.push_back( input );
vector< int > unique_number( number.size(), 0 );
vector< int > repeated( number.size(), 1 );
for( int i = 0; i < number.size(); i++ )
{
for( int j = i + 1; j < number.size() + 1; j++ )
{
if( number[ i ] != 0 && number[ i ] == number[ j ] )
{
repeated[ i ]++;
unique_number[ i ] = number[ i ];
}
else
unique_number[ i ] = number[ i ];
if( j == number.size() )
{
for( int z = 0; z < number.size(); z++ )
{
if( number[ z ] == unique_number[ i ] )
number[ z ] = 0;
}
}
}
}
for( int i = 0; i < number.size(); i++ )
{
if( ( unique_number[ i ] != 0 && repeated[ i ] == 1 ) || ( unique_number[ i ] != 0 && repeated[ i ] % 2 != 0 ) )
{
numbersAreCorrect = false;
cout << unique_number[ i ] << endl;
break;
}
else if( repeated[ i ] == 1 )
numbersAreCorrect = true;
else if( repeated[ i ] % 2 != 0 )
{
numbersAreCorrect = false;
cout << repeated[ i ] << endl;
break;
}
else if( repeated[ i ] % 2 == 0 )
numbersAreCorrect = true;
}
if( numbersAreCorrect == true )
cout << "0" << endl;
return 0;
}
Эта программа получает положительные целые числа от пользователя, проверяет, повторяется ли целое число 2k (четное) или 2k + 1 (нечетное) время. если последнее верно, оно печатает целое число, иначе оно печатает 0; Я использовал 20000 входов, и для оценки требуется более 10 секунд. Мне нужно знать, как сделать процесс быстрее. например, этот вход приводит к "0": 1 2 2 1, и это приводит к "3": 1 2 2 1 3
Как насчет того, чтобы вы сначала разобрали вещь. Тогда вам нужно сделать только один цикл for вместо двух, потому что для поиска всех повторений вы просто считаете последовательные вхождения.
В противном случае используйте набор или карту. Снова вы перейдете к O (NlogN) вместо O (N ^ 2).
std::cout
.cout << endl
буфер (вызываяcout << endl
), что значительно замедляет ваш вывод.