class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int,int> hashmap;
stack<int> st;
for (int i = nums2.size() - 1; i >= 0; --i) {
int num = nums2[i];
while (!st.empty() && num >= st.top()) {
st.pop();
}
hashmap[num] = st.empty() ? -1 : st.top();
st.push(num);
}
vector<int> res(nums1.size());
for (int i = 0; i < nums1.size(); ++i) {
res[i] = hashmap[nums1[i]];
}
return res;
}
};
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int size = temperatures.size();
stack<int> st;
vector<int> res(size, 0);
for (int i = size - 1; i >= 0; --i) {
while(!st.empty() && temperatures[i] >= temperatures[st.top()]) {
st.pop();
}
if (st.size() == 0) {
res[i] = 0;
st.push(i);
} else {
res[i] = st.top() - i;
st.push(i);
}
}
return res;
}
};
3. 901. 股票价格跨度 力扣
class StockSpanner {
public:
stack<int> st;
map<int, int> mp;
StockSpanner() {
}
int next(int price) {
int ret = 1;
while(!st.empty() && st.top() <= price) {
ret += mp[st.top()];
ret++;
st.pop();
}
st.push(price);
mp[price] = (ret - 1);
return ret;
}
};
/**
* Your StockSpanner object will be instantiated and called as such:
* StockSpanner* obj = new StockSpanner();
* int param_1 = obj->next(price);
*/