# 力扣第49天— 第503题、第42题
一、第503题–下一个更大元素II
跟之前的题很像。收尾相连、或者成环的循环,用取模的操作模拟。
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
stack<int> st;
vector<int> result(nums.size(), -1);
st.push(0);
for(int j=1; j < nums.size()*2; ++j){
int i = j % nums.size();
if(nums[i] <= nums[st.top()]) st.push(i);
else{
while(!st.empty() && nums[i]> nums[st.top()]) {
result[st.top()] = nums[i];
st.pop();
}
st.push(i);
}
}
return result;
}
};
二、第42题–接雨水
常考的题,困难难度。有些费劲,但还可以。
class Solution {
public:
int trap(vector<int>& height) {
int sum = 0;
stack<int> st;
st.push(0);
for(int i = 1; i<height.size(); i++){
if(height[i] < height[st.top()]) st.push(i);
else if(height[i] == height[st.top()]) {
st.pop();
st.push(i);
}
else{
while(!st.empty() && height[i] > height[st.top()]){
int mid = st.top();
cout << i<< '-'<< mid <<'-'<< sum <<endl;
st.pop();
if(!st.empty()){
int h = min(height[st.top()], height[i]) - height[mid];
int w = i - st.top() -1;
sum += h*w;
}
}
st.push(i);
}
}
return sum;
}
};