LeetCode
画船听雨
和梦想谈一次恋爱,也要疯狂,也要坚持
展开
-
LeetCode 23. 合并K个排序链表
题目描述解题思路堆排序将每个链表中元素放在一起,构造一个元素个数为k的小顶堆,每次取出堆顶元素,构成新的链表。 并把该元素后面的元素加入到堆中,反复操作直到堆为空。 使用优先队列来实现堆,可以方便运算。代码实现/** * Definition for singly-linked list. * struct ListNode { * int v...原创 2018-07-09 21:52:11 · 374 阅读 · 0 评论 -
LeetCode 25. k个一组翻转链表
题目描述解题思路分别求解并合并分成若干个K个一段的,然后将每个进行翻转,最后将他们连接起来即可。代码实现struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};class Solution{public: ListN...原创 2018-07-09 21:57:11 · 543 阅读 · 0 评论 -
LeetCode 37. 解数独
题目描述解题思路暴力递归使用dfs进行暴力递归,需要判断一下三个条件,标记一下是否出现过,行、列以及3*3的小格子中是否出现过。 注意递归结束的条件,失败后不要返回(在这里写错了,没注意到)。代码实现int r[12][12];int c[12][12];int g[12][12];int mp[12][12];class Solution{pu...原创 2018-07-09 22:01:50 · 742 阅读 · 0 评论 -
LeetCode 239. 滑动窗口最大值
题目描述解题思路线性扫描借助一个辅助队列(双端队列),从头遍历数组,根据如下规则进行入队列或出队列操作: 1. 如果队列为空,则当前数字入队列 2. 如果当前数字大于队列尾,则删除队列尾,直到当前数字小于等于队列尾,或者队列空,然后当前数字入队列 3. 如果当前数字小于队列尾,则当前数字入队列 4. 如果队列头超出滑动窗口范围,则删除队列头 这样能始终保证队...原创 2018-07-09 22:06:13 · 2845 阅读 · 0 评论 -
LeLeetCode 403. 青蛙过河
题目描述解题思路bfs暴力查找+小剪枝首先特判一下特殊情况,当第二个与第一个的距离差大于1的话,直接返回false 对于每个石子的下一跳都有三种情况,k-1、k、k+1。其中这个K代表当前这个石子是由多长的步数跳过来的。 假设当前位置为pos,它是由k长度跳过来的。vis[pos][k]表示这个状态是否出现过。 需要注意的是:一定要判断vis[pos][k]是否之前出现,...原创 2018-07-10 20:59:47 · 1228 阅读 · 0 评论 -
LeetCode 10. 正则表达式匹配
题目描述解题思路1. 暴力递归这道题与剑指offer中的“正则表达式”,有相似之处。 区别在于,剑指offer中那道题好像是不处理”a”, “a*…a*”这种情况,即为主串为空,但是模式串不为空的情况,因此,加上对这种情况的特判即可。 主要是要保证,当模式串不为空时,后面的号表示前面的字符一个都不取,举例:”a” 可以与“aa*b*c*d,只要这种间隔出现的时候才可以,...原创 2018-07-07 21:11:07 · 547 阅读 · 0 评论 -
LeetCode 4. 两个排序数组的中位数
题目描述:解题思路1. 归并法首先想到的思路就是归并排序中的归并操作,将两个有序的数组进行重组之后O(1)的查找到中位数元素,但是归并的时间复杂度为O(n+m),与要求的O(log(m+ n))相差很多,因此不可行。2. 分治法因为时间复杂度要求为O(log(m+n))因此采用的是分治算法这样能保证时间复杂度是log级别。 但是如何进行分治是这道题的难点。 ...原创 2018-07-06 10:25:47 · 275 阅读 · 0 评论 -
LeetCode 45. 跳跃游戏 II
题目描述解题思路贪心解法从起点开始找到他能到达的点中,可以跳的最远的点。举个例子,起点是sx,可以到达位置s1, s2,其中s1可以跳step1,s2可以跳step2,那么取s1+step1,s2+step2中的最大值,代表可以下一跳可以到达的最远的地方。依次贪心,保证最后结果最优。代码实现“`C++ class Solution { public: ...原创 2018-07-07 21:20:34 · 290 阅读 · 0 评论