想想其实坚持下来也不是很难,不过有很多题做一遍应该是记忆没那么深,anyway,要继续往换工作的方向走啊。加油!!
503.下一个更大元素II
想对了地方,但是没有坚持,应该搞两遍,就把所有的i都遍历过整个数组了。学到了。。。
class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {vector<int>result(nums.size(),-1);stack<int>st;//用来记序号st.push(0);for(int i = 1;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>heightl_max(height.size(),0);vector<int>heightr_max(height.size(),0);int size = height.size();heightl_max[0] = height[0];heightr_max[size - 1] = height[size - 1]; for(int i = 1;i < size; i++){heightl_max[i] = max(height[i],heightl_max[i-1]);}for(int i = size -2;i >= 0;i--){heightr_max[i] = max(height[i],heightr_max[i+1]);}for(int i = 0;i < size;i++){if(i == 0 && i == size-1)continue;int count = min(heightl_max[i],heightr_max[i]) - height[i];if(count > 0)sum += count;}return sum;}
};
单调栈法
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[st.top()] > height[i]){st.push(i);}else if(height[st.top()] == height[i]){st.pop();st.push(i);}else{while(!st.empty() && height[st.top()] < height[i]){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; //算的是一层,这个w很重要sum += h * w;}}st.push(i);}}return sum;}
};
今天第二题也扶完了,有个印象。。。