题目:每日股票价格(栈,单调递减栈)

题目:每日股票价格
给定某只股票连续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;
}
posted @ 2024-11-28 21:37  lipu123  阅读(10)  评论(0)    收藏  举报