我必须创建一个计算爆破气球的程序,比如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;
}
热烈欢迎任何帮助。
答案 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
方法的调用次数。