单调栈结构

该代码使用C++实现了一个功能,通过维护一个辅助栈stack1,能够找到给定数组arr中每个元素左侧的最小值。在遍历数组的过程中,栈顶元素始终是当前子序列中的最小值。最后返回一个二维数组,记录每个元素左侧和右侧的最小值索引。
摘要由CSDN通过智能技术生成

#include<vector>
#include<stack>
using namespace std;
vector<vector<int>> func(vector<int>& arr)
{
    int len = arr.size();
    stack<int> stack1;
    vector<vector<int>> ret(len, vector<int>(2));
    for (int front = 0; front < len; ++front )
    {
        while (!stack1.empty() && arr[stack1.top()] > arr[front])
        {
            int TopIndex = stack1.top();
            stack1.pop();
            ret[TopIndex][1] = front;
            ret[TopIndex][0] = stack1.empty() ? -1 : stack1.top();
        }
        stack1.push(front);
    }
    while (!stack1.empty())
    {
        int TopIndex = stack1.top();
        stack1.pop();
        ret[TopIndex][1] = -1;
        ret[TopIndex][0] = stack1.empty() ? -1 : stack1.top();
    }
    return ret;
}
int main()
{
    vector<int> arr{ 3,4,1,5,6,2,7 };
    vector<vector<int>> ret = func(arr);
    for (int i = 0; i < ret.size(); ++i)
    {
        cout << "[";
        cout << ret[i][0] << "," << ret[i][1];
        cout << "]" << endl;
    }
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值