1、c++中栈的使用(stack)
栈的特性:先进后出,后进先出
使用时需要先引入头文件#include <stack>
建立空栈:stack<int> st;(栈里面的元素是int类型的)
插入元素:st.push(i);
弹出栈顶元素:st.pop();
获得栈顶元素的值:st.top()
2、c++中vector向量的使用
vector向量实际上是一个可变长度的数组,超级好用
使用时需要先引入头文件#include <vector>
vector的初始化:
vector<int> a;声明一个int类型的向量a(向量里面的元素都是int类型的)
vector<int> a(10);声明一个int类型的向量a,且初始化向量大小为10
vector<int> a(10,0);声明一个int类型的向量a,且初始化向量大小为10,每个元素的初始值为0
vector<int> a={1,2,3};直接为向量赋初值
vector的大小:
和字符串长度的方法一样,均为a.size()
3、解题思路之单调栈的使用
单调栈的作用:求某个元素左面或右面比他大或小的第一个元素
使用的数据结构:栈
根据实际情况决定栈的单调性:
栈单调递增:求右/左面第一个比他大的元素;
栈单调递减:求右/左面第一个比他小的元素;
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int main() {
vector<int> tem = { 73,74,75,71,69,72,76,73 };
stack<int> st;
vector<int> res(tem.size(), 0);
st.push(0);
for (int i = 1;i < tem.size();i++) {
if (tem[i] < tem[st.top()]) {
st.push(i);
}
else if (tem[i] == tem[st.top()]) {
st.push(i);
}
else {
while (!st.empty() && tem[i] > tem[st.top()]) {
res[st.top()] = i - st.top();
st.pop();
}
st.push(i);
}
}
for (int i = 0;i < res.size();i++) {
if (i != res.size() - 1) {
cout << res[i] << ",";
}
else {
cout << res[i];
}
}
return 0;
}