![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
双指针
_amnesia_
这个作者很懒,什么都没留下…
展开
-
leetcode 76. 最小覆盖子串
题解 双指针 还是有一些逻辑的 左右两个指针分别记录左右区间范围, count 记录当前窗口是否满足条件,如果满足条件缩小窗口范围,找到当前满足条件的最小范围,之后记录结果,然后左指针右移,继续查找。 这里还给出了s.substr 的使用 代码如下: s1=S.substr(1,3);//在字符串S中,复制从位置1开始长度为3的字符串; 代码 class Solution { public: string minWindow(string s, string t) { vector原创 2021-06-19 09:49:15 · 173 阅读 · 0 评论 -
leetcode 56. 合并区间
题解 双指针 需要把区间先排一下序 左指针指向区间最左边的位置,右指针指向区间最右边的位置,t 来控制上个区间最右边的位置 如果下个区间可以和上个之前的合并,那么进行更新,知道到这个位置没有可以合并的区间为止,之后更新左指针继续进行看这个区间可以合并的最大范围。 如果不理解的可以先看一遍代码 欢迎指正和提问~ 代码 class Solution { public: vector<vector<int>> merge(vector<vector<int>>原创 2021-06-09 17:00:07 · 54 阅读 · 0 评论 -
leetcode 42. 接雨水
题解 方法一:暴力,从左到右遍历一次,当前位置所能接的最大雨水的值为当前位置的左边的最大值和当前位置的右端的最大值的最小值减去当前位置的值。 方法二:先存储好每个位置的左边最大值和右边最大值,其余步骤和方法一一样,他俩应该是互补的,一个时间复杂度高,一个空间复杂度高。 方法三:堆栈 代码 方法一 class Solution { public: int trap(vector<int>& height) { //暴力大法好hhh,什么叫做困难题。。。什么是快乐星球原创 2021-04-16 16:16:25 · 101 阅读 · 0 评论 -
leetcode 15. 三数之和
题解 双指针 感觉就是对题目的深度理解,首先遍历a 那么就是找 b + c = -a 的情况。首先不能进行暴力解决,所以要有一定的简化,b 代表左指针,c 代表右指针,对于去掉重复的,需要先对数组从小到大排序,看到重复的直接过掉即可,这样的话,b 从左向右变大,c 从右向左遍历,保持平衡,最后当两个数同一位置的时候那么遍历结束。 先打了一遍官方代码,感觉逻辑还是有些混乱的,建议看第二份代码,还是比较清晰的。 代码 class Solution { public: vector<vector&原创 2021-03-16 10:12:30 · 57 阅读 · 0 评论 -
leetcode 11. 盛最多水的容器
题解 双指针 一开始想到了,首先先看给的数据的大小,一看数据就知道不能用0(n^2)来解决,不能暴力解决。 想到了双指针,但没想到左移右移的条件,下次还是需要要仔细思考一下子的。 左右指针分别指在最左边和最右边 左指针右移的条件: 是当左指针的那个高度小于右指针的那个高度。原因:当左指针高度小于右指针,那么右指针左移的任何一个矩形的面积都要比当前的要小。 右指针左移的条件: 是当左指针的那个高度大于右指针的那个高度。原因:当左指针那个高度大于右指针那个高度,右指针和左指针右移的任何一个高度比当前的矩形面积都原创 2021-03-15 09:42:38 · 48 阅读 · 0 评论 -
leetcode 992. K 个不同整数的子数组
题解 滑动窗口 动态规划 恰好K个组成为 最多K个组成 - 最多K - 1个组成 如何计算最多K个组成:当从1个增加为2个,增加的数目为新的子数组的长度。 代码 class Solution { public: int GetMostDistinct(vector<int>& A, int K) { unordered_map<int,int>mp; int left = 0,right = 0,ret = 0; whi原创 2021-02-09 10:50:04 · 62 阅读 · 0 评论 -
leetcode 978. 最长湍流子数组
题解 双指针 其实就是暴力吧,想好各种可能的情况,左右两个·指针,如果满足,右指针右移一个,如果不满足,左指针要变为右指针重新计算。注意的是左右指针相同的情况下,需要判断和下一个数是否相同,如果相同那么左指针和右指针仍需要右移一次,如果不相同那么仍满足条件,只需要右指针右移即可。 代码 class Solution { public: int maxTurbulenceSize(vector<int>& arr) { int n = arr.size();原创 2021-02-08 10:40:26 · 66 阅读 · 0 评论 -
leetcode 424. 替换后的最长重复字符
题解 一开始不太会做看了教程才会的。 双指针,左右各一个,一开始都指向第一个字母,然后右指针右移并且计算当前字母的个数,并且记录出最大值。如果当前重复的最大值中在区间内不一样的个数大于k那么左指针右移,保持区间大小不变。 代码 class Solution { public: int characterReplacement(string s, int k) { vector<int>num(26);//26个字母 int n = s.length();原创 2021-02-02 10:08:35 · 60 阅读 · 0 评论