503.下一个更大元素II
i%nums.size() 好啊
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
vector<int> res(nums.size(),-1);
if(nums.size()==0) return res;
stack<int> st;
st.push(0);
for(int i=1;i<nums.size()*2;i++){
if(nums[i%nums.size()] < nums[st.top()]) st.push(i%nums.size());
else if(nums[i%nums.size()] == nums[st.top()]) st.push(i%nums.size());
else{
while(!st.empty() && nums[i%nums.size()] > nums[st.top()]){
res[st.top()] = nums[i%nums.size()];
st.pop();
}
st.push(i%nums.size());
}
}
return res;
}
};
42. 接雨水
class Solution {
public:
int trap(vector<int>& height) {
if(height.size()==2) return 0;
stack<int> st;
st.push(0);
int sum=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();
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;
}
};