LeetCode || 双指针 / 单调栈
11. Container With Most Water

题意:取两根求最大体积
思路:使用两个指针分别指向头和尾,然后考虑左右两根:
对于小的那根,如果选择了它,那么能够产生的最大体积一定是当前的情况:因为当前情况体积=这根长度 * 当前距离,以后的话长度一定是左右边界的min,即<=这根长度,距离一定越来越小
因此小的那根以后就不会被选了,因此把小的那根的指针挪动一下
直到指针相遇
class Solution {
public:
int maxArea(vector<int>& height) {
int ans = ;
int l = , r = height.size() - ;
while (l < r) {
ans = max(ans, (r - l) * min(height[l], height[r]));
if (height[l] <= height[r]) l++;
else r--;
}
return ans;
}
};
42. Trapping Rain Water

题意:给一些柱形块,求下雨时可积水的体积,如图
思路:用一个单调递减栈,只有当遇到更高的柱形的时候才会产生积水,此时的栈顶是积水的底,次栈顶是左边界,当前是右边界。
每次先栈中把比当前柱小的都计算好面积出栈,然后将当前柱入栈
class Solution {
public:
int trap(vector<int>& height) {
stack<int> s;
int n = height.size();
int ans = ;
for (int i = ; i < n; i++) {
if (s.empty() || height[i] < height[s.top()]) {
s.push(i);
}
else {
while (!s.empty() && height[s.top()] < height[i]) {
int t = s.top();
s.pop();
if (!s.empty()) {
ans += (i - s.top() - ) * (min(height[s.top()], height[i]) - height[t]);
}
}
s.push(i);
}
}
return ans;
}
};
15. 3Sum
题意:给一组数,取三个数使它们和为0,输出这三个数,要求去重
思路:On3枚举超时,排序后,先取定其中一个数nums[i],然后两个指针分别指向 i 之后的第一个和最后一个数字,由于数字是递增的,当 i, j, k 的和<0时 j++,和>0时 k--
然后当有重复时指针继续移动即可
vector中的一些用法
//声明vector
vector<int> v;
vector<vector<int>> v;
//输入
v.push_back(a);
v.push_back({a, b, c});
//排序
sort(v.begin(), v.end());
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size();
int idx = ;
vector<vector<int>> ans;
for (int i = ; i < n; i++) {
if (i && nums[i] == nums[i - ]) continue;
int j = i + , k = n - ;
while (j < k) {
if (nums[i] + nums[j] + nums[k] < ) {
j++;
} else if (nums[i] + nums[j] + nums[k] > ) {
k--;
} else {
ans.push_back({nums[i], nums[j], nums[k]});
while (j < n - && nums[j] == nums[j + ]) j++;
while (k > && nums[k] == nums[k - ]) k--;
j++; k--;
}
}
}
return ans;
}
};
16. 3Sum Closest
题意:一组数,取三个数使它们的和与target的差最小
思路:还是双指针的思路,先取定一个数
排好序之后用双指针可以让On2的遍历求和降成On
为确定哪个差最小 dif 里面存差,ans存结果
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int n = nums.size();
int dif = 1e9, ans = ;
sort(nums.begin(), nums.end());
for (int i = ; i < n; i++) {
int l = i + , r = n - ;
while (l < r) {
int sum = nums[i] + nums[l] + nums[r];
if (abs(target - sum) < dif) {
dif = abs(target - sum);
ans = sum;
}
if (sum < target) {
l++;
} else if (sum > target) {
r--;
} else return target;
}
}
return ans;
}
};
LeetCode || 双指针 / 单调栈的更多相关文章
- LeetCode 84 | 单调栈解决最大矩形问题
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第52篇文章,我们一起来看LeetCode第84题,Largest Rectangle in Histogram( ...
- [每日一题2020.06.13]leetcode #739 #15 单调栈 双指针查找
739 每日温度 ( 单调栈 ) 题目 : https://leetcode-cn.com/problems/daily-temperatures/ 题意 : 找到数组每一个元素之后第一个大于它的元素 ...
- leetcode Maximal Rectangle 单调栈
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4052721.html 题目链接:leetcode Maximal Rectangle 单调栈 ...
- leetcode Largest Rectangle in Histogram 单调栈
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4052343.html 题目链接 leetcode Largest Rectangle in ...
- LeetCode Monotone Stack Summary 单调栈小结
话说博主在写Max Chunks To Make Sorted II这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴LeetCode Al ...
- LeetCode 84. Largest Rectangle in Histogram 单调栈应用
LeetCode 84. Largest Rectangle in Histogram 单调栈应用 leetcode+ 循环数组,求右边第一个大的数字 求一个数组中右边第一个比他大的数(单调栈 Lee ...
- BZOJ_1307_玩具_单调栈+双指针
BZOJ_1307_玩具_单调栈+双指针 Description 小球球是个可爱的孩子,他喜欢玩具,另外小球球有个大大的柜子,里面放满了玩具,由于柜子太高了,每天小球球都会让妈妈从柜子上拿一些玩具放在 ...
- [LeetCode]739. 每日温度(单调栈)
题目 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temperatures ...
- [bzoj2086][Poi2010]Blocks_单调栈_双指针
Blocks bzoj-2086 Poi-2010 题目大意:题目链接. 注释:略. 想法:首先,不难发现,如果连续的一段数的平均值不小于输入的k的话,这段数是满足题意的. 所以,我们再次简化一下:将 ...
随机推荐
- 割点(Tarjan算法)
本文可转载,转载请注明出处:www.cnblogs.com/collectionne/p/6847240.html .本文未完,如果不在博客园(cnblogs)发现此文章,请访问以上链接查看最新文章. ...
- SourceTree切换语言
点击ok,重启SourceTree即生效 over!over!over!
- CodeForces722C Destroying Array【瞎搞】
题意: 先给你一个序列,然后给你n个1-n的一个数,让你求前i个元素销毁的时候,区间字段和区间最大: 思路: 离线处理,维护新区间首尾位置的起点和终点,倒着处理: #include <bits/ ...
- Unity2d 骨骼动画1:介绍
http://bbs.9ria.com/thread-401613-1-1.html by Orlando Pereira and PedroPereira3 days ago2 Comments 在 ...
- Educational Codeforces Round 19 A, B, C, E(xjb)
题目链接:http://codeforces.com/contest/797 A题 题意:给出两个数n, k,问能不能将n分解成k个因子相乘的形式,不能输出-1,能则输出其因子: 思路:将n质因分解, ...
- 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:6. 设备事件上报
文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...
- NPOI用WorkbookFactory读写 2007以上格式文件(xlsx)
//我用的最新的2.2.1版本 //第一步:引用DLL,5个全导入,包括ICSHARP.ZIP,是个开源压缩工具包.XLSX是压缩格式,需要它来解压 //第二部: using NPOI.SS.User ...
- Java | 基础归纳 | JPA
https://www.javacodegeeks.com/2015/04/jpa%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B.html JPA 全称====>Jav ...
- Tinghua Data Mining 3
特征选择 男女身高 男女抽烟 先验分布 熵 衡量系统的不确定性 属性的价值 降低了不确定性 降低的幅度越高越好 主成分分析 旋转是的数据间的correlation消失掉 Q是正交阵 七长八短,长宽相关 ...
- [ZPG TEST 114] 括号匹配【树分治 点分治 括号序列】
1. 括号匹配 有一棵树,每个节点上都有一个括号(左括号或者右括号).有多少个有序点对(u, v)从u到v的路径上的节点构成的字符串是一个合法的括号匹配?(我们称这样的点对是合法的) 输 ...