leetcode
xiaoxiaoluo
这个作者很懒,什么都没留下…
展开
-
Find Minimum in Rotated Sorted Array II
题目大意: 寻找有序的旋转数组里面最小的数解题思路:原创 2014-10-31 02:21:40 · 3600 阅读 · 7 评论 -
Max Points on a Line
求最多有多少个点在一条直线上参考:http://fisherlei.blogspot.tw/2013/12/leetcode-max-points-on-line-solution.html原创 2014-11-04 02:24:52 · 507 阅读 · 0 评论 -
LRU Cache
参考:http://fisherlei.blogspot.tw/2013/11/leetcode-lru-cache-solution.html实现一个LRU的缓存。d原创 2014-11-04 23:48:58 · 583 阅读 · 0 评论 -
Candy
题目大意:有一群小朋友站成一排,每个小朋友都赋有一个分数,要保证m原创 2014-11-06 22:36:15 · 560 阅读 · 0 评论 -
Median of Two Sorted Arrays
题目大意:在两个已经排好序的数组里面,找出这两个数组的中位数。解题思路:求两个排好序的数组的中位数,可以用二分法来处理。如果两个数组的长度(m + n)总和是奇数,则求第(m+n) / 2 + 1大的数如果两个数组长度(m + n)总和是偶数,则求第(m+n) / 2和第(m+n)/2 + 1这两个数的平均值。问题可以转换为求这两个已排序数组的第k大的数。假设这两个数组原创 2014-12-18 19:01:57 · 546 阅读 · 0 评论 -
Dungeon Game
题目大意: 有一个2D方格,每个方格有个数字,要求从左上角走到右下角,没次走的方向只能是右边和下面,如果格子的数字大于0,表示可以在这个格子加hp,如果小于0就要减掉相应数字的hp.如果到达任何一个格子时,hp为0,表示不能达到这个位置。求刚开始需要初始化多少hp才能保证走到右下角的格子。解题思路:动态规划。求从右下角到左上角需要的hp值。dp[i][j]表示从(i,j)这个位原创 2015-01-31 16:06:04 · 2072 阅读 · 0 评论 -
Maximum Gap
题目大意: 在一个无序的数组中,求这个数组排序完以后,相邻的两个数最大差值,要求保证O(n)的复杂度。解题思路:桶排序http://bookshadow.com/weblog/2014/12/14/leetcode-maximum-gap/假设有N个元素A到B。那么最大差值不会小于ceiling[(B - A) / (N - 1)], 根据鸽巢原理。令buc转载 2015-01-30 14:56:48 · 3491 阅读 · 0 评论 -
Binary Tree Maximum Path Sum
题目大意: 一个二叉树,每个节点都有一个整数值(可以为负数), 求这个二叉树,任意两个节点路径所有节点之和的最大值。解题思路:递归求解。#include using namespace std; class Solution {public: int maxPathSum(TreeNode *root) { if(root == NULL)原创 2015-02-02 23:20:52 · 550 阅读 · 0 评论 -
Copy List with Random Pointer
题目大意:求一个链表的深度拷贝,这个链表中的节点有两个指针,一个next指针指向它的下驱节点,另一个random指针可以指向空或者链表中任意的其他节点。解题思路:分三步,第一步顺序遍历链表,拷贝每个节点,将拷贝的节点插入到被拷贝节点的后面。第二步,拷贝radom节点。第三步,将拷贝节点分离出来。#include #include using namespace s原创 2014-12-09 01:44:36 · 473 阅读 · 0 评论 -
Palindrome Partitioning II
题目大意: 给定一个字符串,要对这个字符串进行切分,要保证切分后的每个子串为回文串。求最小的切分次数。解题思路:最小的切分次数,就是切分后回文子串的个数减一。利用动态规划来求解。dp[i]来表示范围[i, len(str))子串的回文子串的最小个数i = len(str)时, 初始化 dp[len(str)] = 0当 i 如果[i, j]范围的子串为回文串,那么dp[i] =原创 2014-12-10 11:49:22 · 508 阅读 · 0 评论 -
Interleaving String
题目大意:求一个字符串s3是否由字符串s1和字符串s2的交叉组成的结果。解题思路:动态规划。用matched[i][j]表示s1的前i个字符串和s2的前j个字符串的交叉组合是否能成为s3的前i+j个字符串。为了表述清楚,我们认为字符串的坐标是从1开始的,也就是第1个字符为字符串的头字符。首先初始化matched[0][j], s2的前j个字符串是否是s3的前j个字符串mat原创 2014-12-12 18:17:39 · 396 阅读 · 0 评论 -
Best Time to Buy and Sell Stock
题目大意: 有一支股票, 你只有顶多一次买入和卖出的机会。让你求最大的收益。解题思路: 遍历这个数组,用当前值减去之前保存的最小值,求这个差值的最大值。#include #include #include #include #include using namespace std;class Solution {public: int maxProfit(v原创 2015-02-04 22:49:07 · 494 阅读 · 0 评论 -
Best Time to Buy and Sell Stock II
题目大意: 有一支股票, 你买入和卖出的机会不限次数。让你求最大的收益。解题思路:贪心法,求这个序列的每个递增子序列,将这些递增子序列的最大收益和相加就是结果。#include #include #include #include #include using namespace std;class Solution {public: int maxProf原创 2015-02-04 23:46:03 · 441 阅读 · 0 评论 -
Best Time to Buy and Sell Stock III
题目大意: 有一支股票, 你买入和卖出的机会最多两次,且不能在同一天买进和卖出。让你求最大的收益。解题思路:动态规划。用dp_head[i]表示0~i的序列,股票最多交易一次的最大收益dp_tail[i]表示i~end的序列,股票最多交易一次的最大收益。然后求max(dp_head[i] + dp_tail[i+1]).#include #include #incl原创 2015-02-05 00:36:30 · 1600 阅读 · 0 评论 -
Longest Consecutive Sequence
转载:http://blog.csdn.net/souldak/article/details/11473425题目大意:在一个无序的数组里面,求最长的连续数组。给你一个n个数的乱序序列,O(N)找出其中最长的连续序列的长度。例如给你[100, 4, 200, 1, 3, 2],那么最长的连续序列为[1, 2, 3, 4],所以返回4。思路:最简单直转载 2014-12-11 23:45:41 · 481 阅读 · 0 评论 -
Reverse Nodes in k-Group
题目大意:给定一个链表和一个k值,要求把这个链表每段长度为k的节点反转,不够k值长度的片断不反转。解题思路:简单的链表操作,保证O(n)时间完成。#include #include using namespace std;struct ListNode { int val; ListNode *next; ListNode(int x): val(x), next(原创 2015-02-06 00:41:50 · 1983 阅读 · 0 评论 -
Scramble String
转自:http://www.cnblogs.com/yuzhangcmu/p/4189152.htmlclass Solution { public: bool isScramble(string s1, string s2) { if(s1.length() != s2.length()) return转载 2015-02-08 01:56:28 · 592 阅读 · 0 评论 -
Distinct Subsequences
http://fisherlei.blogspot.tw/2012/12/leetcode-distinct-subsequences_19.htmlclass Solution {public: int numDistinct(string S, string T) { if(S.empty()) return 0; if转载 2015-02-10 00:15:48 · 484 阅读 · 0 评论 -
Best Time to Buy and Sell Stock IV
https://gist.github.com/ElninoFong/d08051d98e634991cd93http://www.cnblogs.com/grandyang/p/4295761.html#include #include #include #include #include using namespace std;class Solution {转载 2015-02-19 22:50:04 · 4540 阅读 · 3 评论 -
Largest Rectangle in Histogram
#include #include #include #include #include using namespace std;class Solution {public: int largestRectangleArea(vector &height) { if(height.empty()) return 0; v转载 2015-02-19 17:31:10 · 437 阅读 · 0 评论 -
Add Two Numbers
简单题class Solution {public: ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { ListNode *head = NULL; ListNode *preNode = NULL; int value = 0, carrier = 0;原创 2015-03-14 21:25:10 · 477 阅读 · 0 评论 -
Longest Palindromic Substring
http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-ii.htmlclass Solution {public: string longestPalindrome(string s) { if(s.size() <= 1) { return s;转载 2015-03-15 01:03:28 · 396 阅读 · 0 评论 -
Edit Distance
题目大意:求最短编辑距离。解题思路,动态规划用dp[i][j]表示字符串str1的0~i和str2的0~j的最短编辑距离。dp[i][j]只有3个来源:1)dp[i - 1][j] + 1表示str1的0~ i - 1和str2的0~j的最短编辑距离 + 1,表示删除str1的第i个字符;2)dp[i][j - 1] 表示str1的0~i和str2的0~ j - 1的最短编辑距原创 2015-02-28 19:51:29 · 392 阅读 · 0 评论 -
Populating Next Right Pointers in Each Node II
题目大意:二叉树里面每个节点都有一个next指针,要求使得每个节点的next指针指向这一层的最先遇到的节点。解题思路:宽度遍历。#include #include #include using namespace std;struct TreeLinkNode { int val; TreeLinkNode *left, *right, *next; T原创 2015-02-27 23:32:02 · 394 阅读 · 0 评论 -
Recover Binary Search Tree
http://blog.csdn.net/havenoidea/article/details/12869021题意二叉查找树不合法,有两个节点的值被交换了,找出这两个节点并且不改变树的结构,使得二叉查找树合法,常数空间限制。解题思路:中序遍历查找树会得到一个递增的数列。在中序遍历过程中,找出不符合递增条件的节点,然后交换它们的值。class Solution {publ转载 2015-03-01 00:01:00 · 387 阅读 · 0 评论 -
Maximal Rectangle
题目大意:一个矩阵,每个格子为0或1,求这个矩阵的最大子矩阵,这个子矩阵里面每个格子都为1.解题思路:单调栈。遍历每行,可以求出该列的包含1的高度,转换成“Largest Rectangle in Histogram” 问题。http://blog.csdn.net/xiaoxiaoluo/article/details/43883081class Solution {publi原创 2015-03-02 00:55:21 · 382 阅读 · 0 评论 -
Generate Parentheses
题目大意:给定一个数字表示括号对的个数,求不同的括号组合解题思路:递归class Solution {public: vector generateParenthesis(int n) { vector result; string parenthesis; generateParenthesisAssist(result, pa原创 2015-03-19 11:52:01 · 537 阅读 · 0 评论 -
Permutation Sequence
转自:http://blog.csdn.net/lqcsp/article/details/23322951class Solution {public: string getPermutation(int n, int k) { vector num(n, 0); int total = 1; for(int i = 0;转载 2015-03-26 13:57:45 · 365 阅读 · 0 评论 -
Rotate List
题目大意:链表的右移操作考虑右移k,k可能大于链表的长度。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class So原创 2015-03-26 15:54:17 · 341 阅读 · 0 评论 -
Swap Nodes in Pairs
题目大意:链表中的两个数两两交换/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {pu原创 2015-03-26 16:27:03 · 986 阅读 · 0 评论 -
Unique Paths
题目大意:给定一个矩阵方格,一个机器人在矩阵左上角,它只能向右或向下走,求它走到最右下角有多少种走法。解题思路:dp[i][j]表示走到方格(i, j)一共有多少走法。它至于上方相邻的方格和右边相邻的方格有关dp[i][j] = dp[i - 1][j] + dp[i][j - 1]我们可以把它降成一维的来求解class Solution {public:原创 2015-03-26 16:39:22 · 524 阅读 · 0 评论 -
Search a 2D Matrix
题目大意:给定一个矩阵,矩阵每行的数都是从小到大排列的,并且矩阵每行的第一个数比上一行最后一个数大解题思路:将二维的矩阵看做是一个一维的有序数组,然后用二分查找class Solution {public: bool searchMatrix(vector > &matrix, int target) { if(matrix.empty() || matr原创 2015-03-26 21:49:59 · 481 阅读 · 0 评论 -
Minimum Path Sum
题目也跟之前的http://blog.csdn.net/xiaoxiaoluo/article/details/44651923差不多,这回每个格子有一个值,求到最右下格子时,经过路径的这个格子数总和最小class Solution {public: int minPathSum(vector > &grid) { if(grid.empty() || grid[0原创 2015-03-26 17:04:16 · 450 阅读 · 0 评论 -
Set Matrix Zeroes
转自:http://blog.csdn.net/linhuanmars/article/details/24066199class Solution {public: void setZeroes(vector > &matrix) { if(matrix.empty() || matrix[0].empty()) { return;转载 2015-03-26 21:01:04 · 517 阅读 · 0 评论 -
Sort Colors
题目大意:一个数组,0,1,2代表三种不同颜色(红,白,蓝),要求按颜色排序,红色排前面,白色排中间,蓝色排最后解题思路:可以模仿快速排序的策略,用两个指针p0, p1,分别指向数组的头和尾,p0代表0~p0这个区间的数全是0,p1代表p1~n-1这个区间的数全是2顺序遍历这个数组,如果当前的数是1,就继续遍历下一个数,如果当前的数是0,则将这个数和p0的下一个数交换class Sol原创 2015-03-26 23:09:33 · 446 阅读 · 0 评论 -
Unique Paths II
跟这题差不多http://blog.csdn.net/xiaoxiaoluo/article/details/44651923, 区别就是每个格子可能会有障碍物,不能到达只要特殊处理这些有障碍的格子就可以class Solution {public: int uniquePathsWithObstacles(vector > &obstacleGrid) {原创 2015-03-26 16:52:23 · 1015 阅读 · 0 评论 -
Minimum Window Substring
题目大意:给定字符串S和T,在S串中找出一个最小子串,这个子串包含T的所有字符。解题思路:hashtable.用一个hashtable来保存T中每次字符的出现次数。用另一个hashtable来保存S中包含T中字符的出现次数。重头开始扫描S,若扫描到当前位置包含了T中所有的字符,则缩小窗口直到不能包含T的所有字符为止,若小于之前保存的最小窗口,则保存这个当前窗口。clas原创 2015-03-07 23:45:17 · 433 阅读 · 0 评论 -
Regular Expression Matching
题目大意:两个字符串是否匹配。点 . 表示任意字符*表示前面一个字符0个或任意个解题思路:递归dp[i][j]表示字符串A和B到第i个和第j个字符串是否匹配, A为字符串,B为模式串若dp[j + 1] != '*'当A[i] == B[j] 时, 返回A[i...length], B[j...length]的比较结果当A[i] != B[j] 时, 直接返回f原创 2015-03-08 23:31:05 · 467 阅读 · 0 评论 -
Merge k Sorted Lists
题目大意:有k个已经排序的链表,需要你将这k个链表合并成一个链表,并且保证有序。解题思路:堆排序。先申请一个k大小的小根堆,将每个链表的头一个节点放入堆进行排序。每次取堆中最小的节点,链接到合并链表的尾部, 再将这个最小节点的后续节点放入小根堆中。#include #include #include #include using namespace std;s原创 2015-03-09 03:11:59 · 439 阅读 · 0 评论 -
Substring with Concatenation of All Words
题目大意:给定一个字符串P,和一个字符串列表list,这个列表list里面每个字符串都是相同长度,求字符串里面的每个起始位置,从这个位置开始连续包含了list中的所有字符串解题思路:hashtale.#include #include #include #include #include using namespace std;class Solution {pu原创 2015-03-09 04:26:35 · 611 阅读 · 0 评论