本文主要是介绍901. 股票价格跨度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。
当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。
例如,如果未来 7 天股票的价格是 [100,80,60,70,60,75,85],那么股票跨度将是 [1,1,1,2,1,4,6] 。
实现 StockSpanner 类:
StockSpanner() 初始化类对象。
int next(int price) 给出今天的股价 price ,返回该股票当日价格的 跨度 。
与739. 每日温度类似
思路:
使用单调栈。及时去掉无用数据,保证栈中元素有序。
题目要求寻找小于等于当天价格的连续天数,可以理解为只关注比该天小的天数即可,后续可以无需再关注价格小的这些天。
如图所示,我们需要记录天数索引以及对应的价格即可。使用单调栈保存他们。新加入元素时,弹出不大于新元素的栈顶元素,直接将该天数减去栈顶元素即可。很经典的一道题。
class StockSpanner {private final Deque<int[]> stack = new ArrayDeque();private int curDay = -1;public StockSpanner() {stack.push(new int[]{-1, Integer.MAX_VALUE});}public int next(int price) {while(price>=stack.peek()[1]) {stack.pop();}curDay ++;int ans = curDay - stack.peek()[0];stack.push(new int[]{curDay, price});return ans;}
}/*** Your StockSpanner object will be instantiated and called as such:* StockSpanner obj = new StockSpanner();* int param_1 = obj.next(price);*/
这篇关于901. 股票价格跨度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!