第一题、下一个更大元素II 力扣题目链接
class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {vector<int> result(nums.size(), -1);if(nums.size() == 0) return result;stack<int> st;for(int i=0; i < nums.size() * 2; i++){while(!st.empty() && nums[i % nums.size()] > nums[st.top()]){result[st.top()] = nums[i % nums.size()];st.pop();}st.push(i % nums.size());}return result;}
};
第二题、接雨水 力扣题目链接
就是横向求面积,递增单调栈,当找到比栈顶大的元素,即是栈顶右边第一个比他大的,然后站内第一个就是左边第一个比他大的,横向求解对应面积即可。
class Solution {
public:int trap(vector<int>& height) {stack<int> st;st.push(0);int sum = 0;for(int i = 1; i < height.size(); i++){while(!st.empty() && height[i] > height[st.top()]){int mid = st.top();st.pop();if(!st.empty()){int h = min(height[i], height[st.top()]) - height[mid];int w = i - st.top() - 1;sum += h * w;}}st.push(i);}return sum;}
};