解题思路:
题目意思表述不清,其实就是让你找比当前日期股票报价高的第一个前日期之间的时间跨度,那么定义一个栈存储之前日期大的数的下标,定义一个数组存放已经遍历过的每日报价,这样每天来的价格和栈中比较,把栈顶对应元素小的全出栈,直到剩下的比自己大,返回二者日期比较,同时把当日的下标入栈,代码如下:
class StockSpanner {
public:
int idx;
// 记录所有入栈数据
vector<int> nums;
// 记录当前所剩最大序列的下标
stack<int> s;
StockSpanner() {
idx = -1;
}
int next(int price) {
idx ++;
// 不断弹出,直到栈顶元素大于 price,则栈顶元素为 price 的上一个更大元素
while(!s.empty() && nums[s.top()] <= price) {
s.pop();
}
int res = s.empty() ? idx + 1 : idx - s.top();
s.push(idx);
nums.emplace_back(price);
return res;
}
};
/**
* Your StockSpanner object will be instantiated and called as such:
* StockSpanner* obj = new StockSpanner();
* int param_1 = obj->next(price);
*/