股票价格跨度
编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。
今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。
例如,如果未来7天股票的价格是 [100, 80, 60, 70, 60, 75, 85],那么股票跨度将是 [1, 1, 1, 2, 2, 4, 6]。
链接:https://leetcode-cn.com/problems/online-stock-span
思路:
建立一个单调栈 ,每次存放进行比较 ,移进备用栈,思路:
建立一个单调栈 ,每次存放进行比较 ,移进备用栈:移出时计数
比较完成后,备用栈全部转移到单调栈,
class StockSpanner {
private Stack spam;//备用栈
private Stack stocks;//单调栈
public StockSpanner() {
stocks = new Stack<>();
spam = new Stack<>();
}
public int next(int price) {
int res = 1;
while (stocks.size() != 0 && price >= stocks.peek()) {
res++; //移出时计数
spam.push(stocks.pop());
}
stocks.push(price);
while (!spam.isEmpty()){
stocks.push(spam.pop());
}
return res;
}
}
比较完成后,备用栈全部转移到单调栈,
class StockSpanner {
private Stack spam;//备用栈
private Stack stocks;//单调栈
public StockSpanner() {
stocks = new Stack<>();
spam = new Stack<>();
}
public int next(int price) {
int res = 1;
while (stocks.size() != 0 && price >= stocks.peek()) {
res++;
spam.push(stocks.pop());
}
stocks.push(price);
while (!spam.isEmpty()){
stocks.push(spam.pop());
}
return res;
}
}