
Two Pointers
文章平均质量分 60
我为老师建博客
这个作者很懒,什么都没留下…
展开
-
567. Permutation in String Medium
这是需要记得的一道题,虽然不难,用的方法很典型。类别是Two Pointers。主要思想是Slide Window,从头开始对于长度等于S1的子串,判断是不是S1的一个排列。这里我们需要考虑的一个子问题是,对于两个长度相同的字符串,怎么样判断它们是不是同一些字符的不同排列呢?当然你也可以排序,但是会很慢。这里用一个比较典型的方法,因为题目中规定只能出现小写字母,我们可以用一个长度为26的i原创 2017-05-06 23:27:03 · 346 阅读 · 0 评论 -
字符串的子串问题详解
https://leetcode.com/problems/minimum-window-substring/#/solutions原创 2017-05-08 23:12:02 · 563 阅读 · 0 评论 -
611. Valid Triangle Number
这道题跟之前做过的 3Sum 很相似(先排序)。O(n^3)的做法肯定超时,应该先固定一个值,然后用two pointers遍历,这样达到O(n^2)的复杂度。不过这里遇到的问题是,如果你固定最小的值,当右边的left和right构成的三角行,此时不合法,应该怎么处理?这时既可以左移right,又可以右移left,但这两种情况都要考虑,因为这种操作都可能使三角形合法。这样就很难处理。答案中有简原创 2017-06-11 23:06:11 · 169 阅读 · 0 评论 -
16. 3Sum Closest Medium
这道题和之前那道 3Sum 的做法是一样的,大致思想是这样的:先排序,然后从第一个元素开始遍历,固定一个值之后,取接下来第一个元素和最后一个元素为左右坐标,分别为left,right,然后求和,如果小于target,让left加一,反之,让right加一,就这样遍历,效率最高。这道题与 3Sum 不同的是,需要判断是不是离target最近,这里可以用两数相减后的绝对值来比较距离然后做取舍代原创 2017-03-24 19:27:58 · 256 阅读 · 0 评论 -
15. 3Sum Medium
依旧很长很慢。。。最好还是参考答案里50ms那个程序,我的这个想的复杂了,懒得解释bool f(int left, int right, int value, vector& nums){if(left > right)return false;int mid = (left + right) / 2;if(nums[mid] == value)return true;原创 2017-03-14 00:18:11 · 168 阅读 · 0 评论 -
18. 4Sum Medium
这道题,还是那道3Sum的加强版。。。再外面套一层循环就可以了,另外,每一层循环外面,都要加一行循环,把接下来相同的元素跳过,代码如下:class Solution {public: vector > fourSum(vector& nums, int target) { vector > result; if(nums.empty())return resu原创 2017-03-26 11:42:51 · 178 阅读 · 0 评论