#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;
}
单调栈结构
最新推荐文章于 2024-09-27 14:28:55 发布
该代码使用C++实现了一个功能,通过维护一个辅助栈stack1,能够找到给定数组arr中每个元素左侧的最小值。在遍历数组的过程中,栈顶元素始终是当前子序列中的最小值。最后返回一个二维数组,记录每个元素左侧和右侧的最小值索引。
摘要由CSDN通过智能技术生成