题目地址:
https://leetcode.com/problems/online-stock-span/
要求实现一个类,实现这样的功能,它可以读取最新的数,并且返回之前读取过的、其左边紧挨着它的连续的小于等于该数的数的个数,它本身也算。
可以用单调栈。开一个单调上升栈并维护其单调性即可。代码如下:
import java.util.Deque;
import java.util.LinkedList;
public class StockSpanner {
private Deque<int[]> stk;
private int idx;
public StockSpanner() {
stk = new LinkedList<>();
}
public int next(int price) {
idx++;
while (!stk.isEmpty() && stk.peek()[1] <= price) {
stk.pop();
}
int res = idx - (stk.isEmpty() ? 0 : stk.peek()[0]);
stk.push(new int[]{idx, price});
return res;
}
}
时空复杂度 O ( n ) O(n) O(n), n n n是读取数的个数。