使用堆栈查找下一个更大元素的分段错误
segmentation fault in finding next greater element using stack
我有一个从右到左迭代的数组。你可以看到我的实现:
int arr[]{1,3,22,4,1,-3,3,7};
int n{sizeof(arr)/sizeof(int)};
vector <int> v;
stack <int> s;
for(int i{n-1} ; i >=0 ; i--){
if(s.empty()){
v.push_back(-1);
}
else if(arr[i]<s.top()){
v.push_back(s.top());
}
else {
while(arr[i]>=s.top() && s.size()>0){
s.pop();
}
if(s.empty()){
v.push_back(-1);
}
else{
v.push_back(s.top());
}
}
s.push(arr[i]);
}
我无法调试,因为程序在我启动调试会话后立即崩溃。
这个逻辑看起来很绕。可能有一种更简洁、更有表现力的方式来表达你的意思。
段错误是由于您在查看顶部后检查 s
是否为空造成的
while(arr[i]>=s.top() && s.size()>0)
你可以试试while (!s.empty() && arr[i]>=s.top())
我有一个从右到左迭代的数组。你可以看到我的实现:
int arr[]{1,3,22,4,1,-3,3,7};
int n{sizeof(arr)/sizeof(int)};
vector <int> v;
stack <int> s;
for(int i{n-1} ; i >=0 ; i--){
if(s.empty()){
v.push_back(-1);
}
else if(arr[i]<s.top()){
v.push_back(s.top());
}
else {
while(arr[i]>=s.top() && s.size()>0){
s.pop();
}
if(s.empty()){
v.push_back(-1);
}
else{
v.push_back(s.top());
}
}
s.push(arr[i]);
}
我无法调试,因为程序在我启动调试会话后立即崩溃。
这个逻辑看起来很绕。可能有一种更简洁、更有表现力的方式来表达你的意思。
段错误是由于您在查看顶部后检查 s
是否为空造成的
while(arr[i]>=s.top() && s.size()>0)
你可以试试while (!s.empty() && arr[i]>=s.top())