503. 下一个更大元素 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;
}
};
42. 接雨水
class Solution {
public:
int trap(vector<int>& height) {
//动态规划
if(height.size()<=2) return 0;
int sum=0;
vector<int> maxLeft(height.size(),0);//左边最大值数组
vector<int> maxRight(height.size(),0);//右边最大值数组
maxLeft[0]=height[0];
for(int i=1;i<height.size();i++){
maxLeft[i]=max(height[i],maxLeft[i-1]);
}
int size=maxRight.size();
maxRight[size-1]=height[size-1];
for(int i=size-2;i>=0;i--){
maxRight[i]=max(height[i],maxRight[i+1]);
}
for(int i=0;i<height.size();i++){
int h=min(maxLeft[i],maxRight[i])-height[i];
if(h>0) sum+=h;
}
return sum;
}
};