#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。
发布于 2014-01-31 15:36:02
不如你先整理一下。然后,您只需要执行一个for循环而不是两个循环,因为要查找所有重复,只需计算连续出现的次数。
如果失败,请使用一组或一张地图。同样,您将降到O(NlogN)而不是O(N^2)。
https://stackoverflow.com/questions/21483758
复制相似问题