这段代码有哪儿会引起RuntimeError的地方么
这段代码有哪里会引起RuntimeError的地方么
我在本地测试没出过问题,但是放到oj系统上就runtime error,错误代码11。
应该是访问到未定义的内存,可是我查了好久都没找到哪里越界了,求指教
补充问题:
------解决思路----------------------
问题1: int trains[Length];这个不要定义在函数内的栈区。一般OJ给的堆区大小是64K。把trains定义为全局变量。
问题2:for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
n的范围1 ≤ n ≤ 1,600,000你的时间复杂度为O(n^2)所以即使没有上面的问题,也还是会超时的。
我在本地测试没出过问题,但是放到oj系统上就runtime error,错误代码11。
应该是访问到未定义的内存,可是我查了好久都没找到哪里越界了,求指教
#include <cstdio>
#define Length 1600050
struct StacketNode
{
int data;
StacketNode* next;
};
class Stacket
{
private: int _size;
StacketNode* Bottom;
StacketNode* Top;
public:
Stacket();
~Stacket();
void Push(int tra);
int Pop();
int GetTop();
private:
};
Stacket::Stacket()
{
Bottom = new StacketNode();
Bottom->data = 0;
Top = Bottom;
_size = 0;
}
void Stacket::Push(int tra)
{
StacketNode* temp = new StacketNode();
temp->data = tra;
temp->next = Top;
Top = temp;
_size++;
return;
}
int Stacket::Pop()
{
StacketNode* temp;
int temint;
temp = Top;
temint = temp->data;
Top = Top->next;
Top->next;
delete temp;
_size--;
return temint;
}
int Stacket::GetTop()
{
return Top->data;
}
int main()
{
int n = 0, m = 0, b = 0, t = 0;
int trains[Length];
bool Isfeasible = true;
scanf("%d %d",&n,&m);
int Seq[Length];
Stacket* A = new Stacket();
Stacket* B = new Stacket();
for (int i = 0; i < n; i++)
{
scanf("%d", &trains[i]);
A->Push(n-i);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (B->GetTop() == trains[i])
{
B->Pop();
Seq[t++] = 1;
b--;
break;
}
else if(A->GetTop() == 0)
{
Isfeasible = false;
break;
}
else
{
if (++b <= m)
{
B->Push(A->Pop());
Seq[t++] = 0;
}
else
{
Isfeasible = false;
break;
}
}
if (Isfeasible == false)
break;
}
}
if (Isfeasible == false)
printf("No\n");
else
{
for (int i = 0; i < t; i++)
{
switch (Seq[i])
{
case 0:
printf("push\n");
break;
case 1:
printf("pop\n");
}
}
}
return 0;
}
补充问题:
------解决思路----------------------
问题1: int trains[Length];这个不要定义在函数内的栈区。一般OJ给的堆区大小是64K。把trains定义为全局变量。
问题2:for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
n的范围1 ≤ n ≤ 1,600,000你的时间复杂度为O(n^2)所以即使没有上面的问题,也还是会超时的。