优化程序C ++

时间:2015-03-24 13:24:58

标签: c++ string optimization

我必须创建一个计算爆破气球的程序,比如ZUMA。如果我有3行或更多具有相同颜色的气球,则该序列将会爆发。所以在输入中,我有数量的气球(3 <= N <= 10 ^ 5),并且带有数字的线(具有气球颜色的线(1 <=сi<= 100)),确保1个序列。我必须输出爆破的气球数量。我有一个程序,但有时它的工作时间超过4000毫秒。如何让它更快地工作?

  #include <iostream>
#include <string>
#include <vector>
using namespace std;


int Fmax(int n, const string& f){
int  max;
vector<int> k(n);

int i, j, p = 0;
for (i = 0; i <= n; i++)
{
    k[i] = 0;
}

for (i = 0; i <= n; i++)
{
    for (j = i; j <= n; j++)
    {

        if (f[i] == f[j])
        {
            k[p]++;

        }
        else break;
    }
    p++;
}

max = k[0];
for (i = 0; i <= p; i++){ if (max <= k[i]){ max = k[i]; } }
return max;
}
string pog(int n){
int d;
string doa;
for (int i = 1; i <= n; i++){
    cin >> d;
    doa += (char)d;
}

return doa;
}
void main(){
int i, sc = 1, bf = 1;
string f;
int len;
cin >> i;
f = pog(i);
len = i;

while (Fmax(f.length(), f) >= 3){

    for (int c = 1; c <= f.length(); c++){

        if (f[c] == f[c - 1]){
            if (sc == 1){ bf = c - 1; }
            sc++;
        }
        else{
            if (sc >= 3){ f.erase(bf, sc);  sc = 1; break; }
            sc = 1;
        }



    }
}
cout << len - f.length() << endl;


}

热烈欢迎任何帮助。

2 个答案:

答案 0 :(得分:2)

你正在泄露记忆。使用向量来避免这种情况。

为什么需要创建array?为什么不直接使用字符串?

传递未被const引用修改的字符串以避免复制。

答案 1 :(得分:0)

对长度使用常量变量:

const unsigned int f_length = f.length();
while (Fmax(f_length, f) >= 3){

  for (int c = 1; c <= f_length ; c++){

这有助于编译器减少对length方法的调用次数。