所有最接近的较小值

时间:2012-04-16 17:25:29

标签: c++ stack

我想构建我的代码来解决所有最近的小值问题,这是我为此付出的努力

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

它编译,但没有输出,为什么?请帮助我

2 个答案:

答案 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