本文主要是介绍代码随想录算法训练营Day59 | 503.下一个更大元素II 42. 接雨水,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
代码随想录算法训练营Day59 | 503.下一个更大元素II 42. 接雨水
LeetCode 503.下一个更大元素II
题目链接:LeetCode 503.下一个更大元素II
思路:
class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {// 拼接一个新的numsvector<int> nums1(nums.begin(), nums.end());nums.insert(nums.end(), nums1.begin(), nums1.end());// 用新的nums大小来初始化resultvector<int> result(nums.size(), -1);if (nums.size() == 0) return result;// 开始单调栈stack<int> st;st.push(0);for (int i = 1; i < nums.size(); i++) { if (nums[i] < nums[st.top()]) st.push(i); else 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);}}// 最后再把结果集即result数组resize到原数组大小result.resize(nums.size() / 2);return result;}
};
注意 :
1.
2.
3.
4.
LeetCode 42. 接雨水
题目链接:LeetCode 42. 接雨水
思路:
有h大于零的时候,在统计到总和中
整体代码如下:class Solution {
public:int trap(vector<int>& height) {int sum = 0;for (int i = 0; i < height.size(); i++) {// 第一个柱子和最后一个柱子不接雨水if (i == 0 || i == height.size() - 1) continue;int rHeight = height[i]; // 记录右边柱子的最高高度int lHeight = height[i]; // 记录左边柱子的最高高度for (int r = i + 1; r < height.size(); r++) {if (height[r] > rHeight) rHeight = height[r];}for (int l = i - 1; l >= 0; l--) {if (height[l] > lHeight) lHeight = height[l];}int h = min(lHeight, rHeight) - height[i];if (h > 0) sum += h;}return sum;}
};
注意 :
1.
2.
3.
4.
LeetCode 704 二分查找
题目链接:LeetCode 704 二分查找
思路:
注意 :
1.
2.
3.
4.
LeetCode 704 二分查找
题目链接:LeetCode 704 二分查找
思路:
注意 :
1.
2.
3.
4.
这篇关于代码随想录算法训练营Day59 | 503.下一个更大元素II 42. 接雨水的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!