题:https://leetcode.com/problems/online-stock-span/
题目大意
不断给出元素,求当前元素开始往前的最大子串,且串中每个元素的值都小于等于 该元素。
思路
class stockPair{
int price;
int day;
public stockPair(int price,int day){
this.price = price;
this.day = day;
}
}
class StockSpanner {
Stack<stockPair> stack;
int day;
public StockSpanner() {
stack = new Stack<>();
day = 0;
}
public int next(int price) {
day++;
while(!stack.isEmpty() && stack.peek().price <= price){
stack.pop();
}
int res;
if(stack.isEmpty())
res= day;
else
res =day - stack.peek().day;
stack.add(new stockPair(price,day));
return res;
}
}
/**
* Your StockSpanner object will be instantiated and called as such:
* StockSpanner obj = new StockSpanner();
* int param_1 = obj.next(price);
*/
class StockSpanner {
Stack<int[]> stack = new Stack<>();
public StockSpanner() {
}
public int next(int price) {
int res = 1;
while (!stack.isEmpty() && stack.peek()[0] <= price)
res += stack.pop()[1];
stack.push(new int[]{price, res});
return res;
}
}
/**
* Your StockSpanner object will be instantiated and called as such:
* StockSpanner obj = new StockSpanner();
* int param_1 = obj.next(price);
*/