我想构建我的代码来解决所有最近的小值问题,这是我为此付出的努力
#include<iostream>
#include<stack>
using namespace std;
void all_smallest(int a[],int n)
{
stack<int>s;
for(int x=0;x<n;x++)
{
while(!s.empty() && s.top()>=a[x])
{
cout<<s.top();
s.pop();
}
if(s.empty()){ continue;}
else
{
s.push(a[x]);
}
}
}
int main()
{
int a[]={0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15};
int n=sizeof(a)/sizeof(a[0]);
all_smallest(a,n);
return 0;
}
它编译,但没有输出,为什么?请帮助我
答案 0 :(得分:1)
由于s开始为空,else
子句永远不会发生(因此s保持为空)。
答案 1 :(得分:1)
检查Wikipedia您没有正确实施算法。这是它应该是什么:
#include<iostream>
#include<stack>
using namespace std;
void all_smallest(int a[],int n)
{
stack<int>s;
for(int x=0;x<n;x++)
{
while(!s.empty() && s.top()>=a[x])
{
s.pop();
}
if(!s.empty())
{
cout<<s.top();
}
s.push(a[x]);
}
}
int main()
{
int a[]={0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15};
int n=sizeof(a)/sizeof(a[0]);
all_smallest(a,n);
cout << "\n";
return 0;
}
输出:
004022601151337