题目:每日股票价格(栈,单调递减栈)
题目:每日股票价格
给定某只股票连续N天的价格列表stockPrices,其中stockPrices[i]
。表示服票某天的价格,请生成一个新列表,对应位置输出为:要想等到股票价格上涨,至少需要等待的天数,如果股票价格不上涨,对应位置输出为0。
解答要求
时间限制:C/C++ 500ms其他语言: 1000ms内存限制: C/C++ 256MB,其他语言:512MB
输入描述
第一行表示第二行元素的个数N;
第二行为用空格隔开的整数,表示每天股票的价格。
其中\(0<N<=1000000\),每天股票价格为正整数
输出描述
输出为用空格分隔的长度为N的列表,对应位置为:要想等到股票价格上涨,至少需要等待的天数
样例输入
5
33 34 14 12 16
样例输出
1 0 2 1 0
这个是一个栈,思考一下,假如说一开始栈中有个33,那么来了一个34,前面那个33就可以出栈了。也就是说只要34比栈顶大,那么就会一直出栈,知道来一个比栈顶小的。里面类似与一个单调递减栈
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
const int maxn=1e5+100;
int a[maxn];
int ans[maxn];
stack<int>s;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
while(s.size()&&a[i]>a[s.top()]){
ans[s.top()]=(i-s.top());
s.pop();
}
s.push(i);
}
for(int i=1;i<=n;i++){
cout<<ans[i]<<" ";
}
cout<<endl;
}