代码随想录算法训练营第五十九天 | 503. 下一个更大元素 II、42. 接雨水
- 503. 下一个更大元素 II
- 题目
- 解法
- 42. 接雨水
- 题目
- 解法
- 感悟
503. 下一个更大元素 II
题目
解法
题解链接
- 使用两个size
class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {vector<int> nums1(nums.begin(), nums.end());nums.insert(nums.end(),nums1.begin(), nums1.end());vector<int> result(nums.size(), -1);stack<int> st;st.push(0);for(int i = 1; i < nums.size(); i++){while(!st.empty() && nums[i] > nums[st.top()]){result[st.top()] = nums[i];st.pop() ;}st.push(i);}result.resize(nums.size()/2);return result;}
};
时间复杂度:O( n)
空间复杂度:O( n)
2.使用i%nums.size()
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;}
};
时间复杂度:O(n )
空间复杂度:O( n)
42. 接雨水
题目
解法
题解链接
- 双指针
class Solution {
public:int trap(vector<int>& height) {if(height.size() <= 2) return 0;vector<int> maxLeft(height.size(), 0);vector<int> maxRight(height.size(), 0);int size = height.size();// 左边最高maxLeft[0] = height[0];for(int i = 1; i < size; i++){maxLeft[i] = max(maxLeft[i-1], height[i]);}// 右边最高maxRight[size-1] = height[size-1];for(int i = size-2; i >=0; i--){maxRight[i] = max(maxRight[i+1], height[i]);}// 求和int sum = 0;for(int i = 0; i < size; i++){int count = min(maxLeft[i], maxRight[i]) - height[i];if(count > 0) sum += count;}return sum;}
};
时间复杂度:O( n)
空间复杂度:O( n)
2.单调栈
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[st.top()], height[i]) - height[mid];int w = i - st.top() - 1;sum += h*w;}}st.push(i);}}return sum;}
};
时间复杂度:O( n)
空间复杂度:O( n)
感悟
分析的越彻底,做起来越顺。