首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是什么使这个程序的处理速度变慢?(C++)

是什么使这个程序的处理速度变慢?(C++)
EN

Stack Overflow用户
提问于 2014-01-31 15:31:34
回答 1查看 105关注 0票数 0
代码语言:javascript
运行
复制
#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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-31 15:36:02

不如你先整理一下。然后,您只需要执行一个for循环而不是两个循环,因为要查找所有重复,只需计算连续出现的次数。

如果失败,请使用一组或一张地图。同样,您将降到O(NlogN)而不是O(N^2)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21483758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档