优化程序C++

Optimizing a program C++

本文关键字:C++ 程序 优化      更新时间:2023-10-16

我必须创建一个程序,它计算爆裂的气球,比如ZUMA。如果我有一条有3个或更多相同颜色的气球的线,这个序列就会爆裂。因此,在输入中,我有气球的数量(3<=N<=10^5),并有一行数字(一行气球的颜色(1<=C I<=100)),其中肯定有1个序列。我必须输出爆气球的数量。我有一个程序,但有时它的工作时间超过4000msv。我怎样才能让它更快地工作?

  #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;

}

欢迎任何帮助。

您正在泄漏内存。使用矢量来避免这种情况。

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

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

长度使用常量变量:

const unsigned int f_length = f.length();
while (Fmax(f_length, f) >= 3){
  for (int c = 1; c <= f_length ; c++){

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