LeetCode
gg_gogoing
这个作者很懒,什么都没留下…
展开
-
LeetCode-Regular Expression Matching
这里写链接内容 这里写链接内容 这个是处理正则表达式的题目 核心问题是*的意思表示它前一位的重复次数可以为0 对于这类匹配 定义一个二维的DP数组,其中dp[i][j]表示s[0,i)和p[0,j)是否match,然后有下面三种情况P[i][j] = P[i - 1][j - 1], if p[j - 1] != ‘*’ && (s[i - 1] == p[j - 1] || p[j -原创 2017-09-03 19:09:39 · 275 阅读 · 0 评论 -
LeetCode-Find the Duplicate Number
查找数组中重复元素,仅有一个元素重复但可能重复多次。数组长度为n+1,1…n每个数字最多出现一次。二分法,首先排序,因为整个数组的中位数是知道的,统计整个数组中小于n/2数字个数,若小于则重复数字在右边,反之在左边。class Solution(object): def findDuplicate(self, nums): """ :type nums: Li原创 2017-09-02 22:30:10 · 230 阅读 · 0 评论 -
LeetCode-Reverse Nodes in k-Group
题意:将列表每K个反转一次。 如k=2,1-2-3-4-5 2-1-4-3-5 如k=3,1-2-3-4-5 3-2-1-4-5反转方法是pre-cur-nxt pre是开始链表的头结点人为加的,是k数组前一个,last是k数组中首位,next是k数组后一个,这里将每次cur都暂存在pre的next中,使用dummy作为pre来进行,class Solution {public:原创 2017-09-02 22:20:25 · 233 阅读 · 0 评论 -
LeetCode-[双指针法]Container With Most Water
双指针法 即从左右两端开始扫描,若满足某种条件则会向中间移动,如此这样可以将复杂度从N2降至N题意:每个点和X轴垂直,构成一个边,任选两个组成挡板储存水,求最多能储藏多少水。分析:1、能放多少水由最短的板子决定。2、因为和位置有关,数据不能排序 3、暴力思维是枚举所有的情况,若想减少比较次数,第一反应是储存前面的最高?但是仍和两个板子间的距离有关,没有办法。使用双指针,若左边板子高,计算此时的值和原创 2017-09-02 21:43:41 · 317 阅读 · 0 评论 -
LeetCode-Merge k Sorted Lists
K路归并排序,将K路都放入最小堆构建起来,每次都取最小放入新的队列,然后将对应的队列再取一个放入堆中。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } *原创 2017-09-02 21:26:48 · 247 阅读 · 0 评论 -
LeetCode-Find Peak Element
Link 题意:在log2N时间中,找到一组数中的峰值(大于左右两边)。如1,3,7,4,6,2 中7 6 都是。解析一看log2N就知道必定二分,但如何二分,进入左右哪边? 因为这个是求局部的峰值,不必求全局最优之类的。可以发现对于数组中任何一个数字他都能归到某一个峰值区间中,那么对于mid处的数字,如果他小于他后面的数字那他所处的峰值定然在前半部分,反之后半部分。class Solut原创 2017-08-31 23:00:16 · 259 阅读 · 0 评论 -
LeetCode-Linked List Cycle
寻找链表是否有环 方法是快慢指针第一次相遇时slow走过的距离:a+b,fast走过的距离:a+b+c+b。 因为fast的速度是slow的两倍,所以fast走的距离是slow的两倍,有 2(a+b) = a+b+c+b,可以得到a=cslow肯定没有走够超过一圈,在第一圈的中间停下来。假设直接就在圆上,则必定slow走一圈相遇,若前面还有一截,则不必等到一圈即可相遇。同时起步是最远的距离。pu原创 2017-09-08 20:22:29 · 337 阅读 · 0 评论 -
LeetCode-Permutations && unique && next
Permutation 按照全排列的方式,每次生成后,下一个数字来插孔生成所有的情况,不然使用递归还要标记每个位置,麻烦。class Solution(object): def permute(self, nums): perms = [[]] for n in nums: new_perms = []原创 2017-09-08 10:58:54 · 315 阅读 · 0 评论 -
LeetCode-[单调栈]Largest Rectangle in Histogram
Link Link 单调栈使用最经典题目。 求最大矩形面积。 N2方法是枚举起点,然后不断枚举终点,在起点固定终点右移过程中记录最短距离即可。 N1方法是使用单调栈,基于的观察是对于一个连续上升的矩形来说,若当前矩形比前一个不小于就放入队列。 因为此时最优解的终点必然可以延展到当前矩形。若当前矩形小于前一个,那前一个有可能是最优解的终点。现在问题是,如何找到最优解的起点。此时以 前一个矩原创 2017-09-08 09:32:14 · 418 阅读 · 0 评论 -
1的个数 汉明距离
这里写链接内容1、直接位移计算int hammingWeight(int n) { int res = 0; for (int i = 0; i < 32; ++i) { res += (n & 1); n = n >> 1; } return res; }2、n和n-1进行与运算原创 2017-09-03 19:41:25 · 422 阅读 · 0 评论 -
56. Merge Intervals && 57. Insert Interval
Merge Intervals这个简单,常见的排序合并思路,然后如果前面的end大于当前的start即合并class Solution(object): def merge(self, intervals): """ :type intervals: List[Interval] :rtype: List[Interval] "原创 2017-10-17 09:49:32 · 416 阅读 · 0 评论