
leetcode
augustliang
眼前两碗米饭,心中一粒飞鸿。
展开
-
LeetCode_Stack_Largest Rectangle in Histogram
Largest Rectangle in Histogram 84问题描述:输入是一个int数组,代表如图的直方图。要求输出是直方图能够覆盖的最大面积。解题思路:直白的看这道题,最大的面积一定是从某个柱出发,向左向右延展,然后得到最大的面积。于是问题来了,从哪个柱开始延展,延展到哪个柱就能得到最大的面积。首先,如题目图中示例,我们先把目光聚焦到5,6,2这三根柱,忽略掉其他的柱。图中已经画出5,原创 2015-06-28 01:25:41 · 666 阅读 · 0 评论 -
LeetCode_DP_Triangle
Triangle一、题目说明要求输入一个如图的数据,输出最短路径和,这里最短是说走过的节点值和最小,同时要求一定要走上下相邻的节点。二、思路拿到这道题,我们会想到在最后一层每个节点应该都有相应的一个路径和,最后求最后一层里最小的一个路径和就可以了。 而最后一层的路径和是怎么来的?是从上一层相加来的,于是我们马上会想到要用到动归。dp[][] 用来存储到当前节点的最短路径和。 动归的话,就要定义初原创 2015-09-02 03:02:48 · 592 阅读 · 0 评论 -
LeetCode_DP_Ugly Number II
Ugly Number II一、题目说明这道题目是输入一个n,要求输出第n个Ugly Number,而Ugly Number就是2,3,5的倍数。二、解题思路首先,我们先列出一组等式: 2*1 =2 2*2=4 2*3=6 2*4=8 。。。 3*1 =3 3*2=6 3*3=9 3*4=12 。。。 5原创 2015-09-02 02:43:00 · 554 阅读 · 0 评论 -
LeetCode_DP_Unique Paths
Unique Paths一、题目说明这道题目很常规,就是给一个矩阵,从左上角走到右下角,有多少种不同的路径。二、思路题目规定只能向下或者向右走,所以当你走到某个点(除了边界),只能从左边或者上边走过来。而边界的话,只需要考虑左边边界和上边边界。如果是左边边界,只能说明是从上边走下来的;如果是上边边界,只能说明是从左边边界走过来的。所以我们想到可以用到动态规划,每个节点去存储到当前节点有多少条路径。初原创 2015-09-01 23:21:08 · 693 阅读 · 0 评论 -
LeetCode_DP_Word Break II
LeetCode_Word Break II一、题目描述:二、解决思路:题目要求我们要在原字符串中加空格,使得隔开的每个词都是词典中的词。 所以我们大可以按顺序扫描每个字符,但是然后当碰到是词典中的词,就加个空格,但是要求返回的结果按题目的提醒是个List,说明有很多分隔方式。再细细想问题,我们发现第二个词能被成功分隔出来,是因为第一个词已经分出来了,依次类推;所以我们可以采用动态规划,设置初值d原创 2015-08-16 21:55:57 · 1058 阅读 · 0 评论 -
LeetCode_Math_Ugly Number
Ugly Number一、题目说明这道题就是检查输入n是否是ugly number。ugly number就是只有公因子2,3,5。二、思路很简单,就是不断用2,3,5整除,最后看是否为1,如果是1,说明是,否则就不是。三、java代码public class Solution { public boolean isUgly(int num) { if(num == 0)原创 2015-09-02 02:49:02 · 758 阅读 · 0 评论 -
LeetCode_Tree_Populating Next Right Pointers in Each Node I II
Populating Next Right Pointers in Each Node I一、题目说明如图所说,将二叉树中每一层作指向。二、解题思路按层级遍历树的节点,使得横向前节点指向后节点。然后再从下一层第一个节点开始,直到每一层都遍历结束。三、java代码/** * Definition for binary tree with next pointer. * public class T原创 2015-09-06 21:13:47 · 703 阅读 · 0 评论 -
Leetcode_Palindrome Partitioning
131. Palindrome Partitioning一、题目描述:这里主要说的概念是回文; 回文比如说“aba”,正着扫描和反着扫面,字符串一致。所以就是要输入一个String,返回所有可能的回文集合;二、解题思路:解决这道题,首先想到有两个方面:一个是检查截取字符串是否满足回文要求;另一个就是扫面字符串。下面有个图,可以更好的理解这道题。这里我们可以选择动态规划或者递归找到要求的回文集合。三、原创 2015-08-22 00:32:31 · 1243 阅读 · 0 评论 -
Leetcode_Palindrome Partitioning II
132. Palindrome Partitioning II一、题目描述跟之前 Palindrome Partitioning (http://blog.youkuaiyun.com/gldemo/article/details/47848763)题目类似,只是变成了返回字符串的最小切割数。二、解决思路如果还按照之前 Palindrome Partitioning 的思路,按理是可以解决这个问题,但是不能在有原创 2015-08-22 04:15:57 · 843 阅读 · 0 评论 -
LeetCode_Maximum Subarray | Maximum Product Subarray
Maximum Subarray一、题目描述就是求一个数组的最大子序列二、思路及代码首先我们想到暴力破解public class Solution { public int maxSubArray(int[] nums) { int sum = Integer.MIN_VALUE; for(int i=0; i<nums.length; i++)原创 2015-08-22 15:12:49 · 802 阅读 · 0 评论 -
LeetCode_Lowest Common Ancestor of a Binary Search Tree (Binary Tree)
Lowest Common Ancestor of a Binary Search Tree一、题目描述二、思路及代码二叉搜索树有个性质:左子树的值都比根节点小,右子树的值比根节点大。那么我们的思路就是递归比较; 如果输入的两个节点的值比当前节点小,说明是在当前根节点的左子树中;反之则在右子树中。如果当前根节点比一个大,比一个小,那么第一个出现的这样的节点就是最近的父亲节点了。/** * Def原创 2015-08-22 21:08:01 · 772 阅读 · 0 评论 -
动态规划 | 带有通配符的字符串匹配(浅显易懂)
带有通配符的字符串匹配一、Leetcode | 44 Wildcard Matching(只有一个字符串包含通配符)题目很简单,就是说两个字符串,一个含有通配符,去匹配另一个字符串;输出两个字符串是否一致。注意:’?’表示匹配任意一个字符,’*’表示匹配任意字符0或者多次首先,我们想到暴力破解。如果从头到尾的破解,到第二个字符时,是否匹配成功取决于第一个字符是否匹配成功! 所以我们想到应该要用到动态原创 2015-08-15 05:48:59 · 11554 阅读 · 7 评论 -
328.LeetCode_Linked List_Odd Even Linked List
328. Odd Even Linked List My SubmissionsQuestionEditorial SolutionTotal Accepted: 29029 Total Submissions: 76708 Difficulty: MediumGiven a singly linked list, group all原创 2016-04-28 23:41:47 · 429 阅读 · 0 评论 -
326. LeetCode_Math_Power of Three
326. Power of Three My SubmissionsQuestionEditorial SolutionTotal Accepted: 38283 Total Submissions: 104551 Difficulty: Easy Given an integer, write a function to determine if it is a powe...原创 2016-04-28 23:55:44 · 585 阅读 · 0 评论 -
LeetCode_DP_Unique Binary Search Trees II
Unique Binary Search Trees II一、题目说明与 Unique Binary Search Trees(http://blog.youkuaiyun.com/gldemo/article/details/48167973)不同的地方是输出所有可能组成的二叉搜索树。二、思路该算法应该是采用循环,循环按每个 i 作为根节点,循环中应用递归的方式去不断构造左子树和右子树。然后在循环中组合不同的原创 2015-09-02 01:40:09 · 460 阅读 · 0 评论 -
Leetcode_DP_Word Break
Leetcode_Word Break一、题目说明这道题是给定一个字符串,要求是否能用空格分割开成词典中包含的字符串组合。二、解题思路这道题按照要求,我们发现要保证字符串中一个词被成功切出来,首先是前一个词被成功切出来。 所以我们想到用动态规划去解决这个问题。 我们用一个boolean型数组去记录每一个被成功切出来词的最后一个字符在字符串中位置。 当然初值就是默认为true。 递推式是 dp原创 2015-09-01 21:47:09 · 867 阅读 · 0 评论 -
LeetCode_DP_Unique Binary Search Trees
Unique Binary Search Trees一、题目说明这道题目是输入一个 n 值,判断 1~n 能构成多少个平衡搜索二叉树。二、思路这道题首先需要推倒一下公式:所以这样思路就很清晰。三、java代码public class Solution { public int numTrees(int n) { int[] G = new int[n+1];原创 2015-09-02 00:16:34 · 619 阅读 · 0 评论 -
LeetCode_Stack_Maximal Rectangle
Maximal Rectangle 85在解答这个问题之前,建议先去做 Largest Rectangle in Histogram 84问题描述:给定一个二维矩阵,矩阵都是由0和1组成的,请找到包含所有1的最大面积,并返回。解决思路:拿到这道题,首先想到是必须找到一个节点是1,然后向左,向右,向上,向下的拓展,使其面积能够达到最大。但是我们应该从哪个节点开始,先向哪个方向拓展。这里我们还是规矩原创 2015-06-27 23:01:02 · 899 阅读 · 0 评论 -
LeetCode_Linked List_Linked List Cycle
Linked List Cycle LeeCode 算法1. 问题描述:输入是一个链表,输出是判断该链表是否有圈。原创 2015-06-28 20:53:30 · 768 阅读 · 0 评论 -
LeetCode_Linked List_Remove Duplicates from Sorted List
83. Remove Duplicates from Sorted List1. 问题描述:输入是一个有序链表,要求出现重复元素只保留一个,输出一个有序无重复元素的链表。2. 解题思路:这个题目很简单,就是指针遍历,然后判断指针所在元素和后一个元素是否值一样,如果一样就断开链接,指针所在元素指向这个值一样元素的下一个。3. java代码:/** * Definition for singly-li原创 2015-06-29 13:32:35 · 481 阅读 · 0 评论 -
LeetCode_Linked List_Linked List Cycle II
142. Linked List Cycle II1. 问题描述:输入是一个链表,要求判断是否有圈,如果有圈,返回圈的起点;否则返回null。2. 解决思路:之前141题是判断链表是否有圈,这一题是要求找到圈的起点。这里先证明一个结论。假设现在有这样一个链表如图,并且有两个指针,1和2,1是慢指针(每次走1步),2是快指针(每次走2步);当 1 指针到圈起点时,2指针的位置如下,其实此时2已经在圈中原创 2015-06-28 21:03:06 · 506 阅读 · 0 评论 -
LeetCode_Stack_Valid Parentheses
Vaild Parentheses leetcode问题描述: 给定一个字符串包括题目所说的一堆括号,判断此字符串是否有效。有效的条件是去掉除括号外其余字符串,这些括号必须 成对相邻 出现。解决思路: 因为成对相邻的条件,我们想到可以采用stack的数据结构存放括号。扫字符串,遇到括号就放入栈,然后当放入的括号和栈顶的括号是一对时,就把这一对括号删除。最后判断栈是都为空,空的话就说明输入字符串有效,否则无效。原创 2015-06-27 21:57:01 · 749 阅读 · 0 评论 -
LeetCode_Linked List_Remove Duplicates from Sorted List II
82. Remove Duplicates from Sorted List II1. 问题描述:输入是一个有序链表,要求删除所有重复值的节点,只留下都是唯一值的节点。返回此链表。2. 解决思路:解决这个问题,我们首先会想到一个边界问题,就是链表头会不会变。如果变,我们需要引入一个dummy节点作为链表的头节点,然后对链表进行节点删除操作。最后返回dummy->next。3. java代码:/*原创 2015-06-29 20:43:50 · 662 阅读 · 0 评论 -
LeetCode_Linked List_Merge Two Sorted Lists
21.Merge Two Sorted Lists1. 问题描述:合并两个有序链表,并返回一个新的有序链表。2. 解决思路:这道题很简单。可以用递归求解,也可以用非递归求解;注意:如果用非递归求解,发现新链表的头结点不确定,所以引入dummy节点。不多说之间上代码。3. java代码:/** * Definition for singly-linked list. * public class原创 2015-06-29 20:57:00 · 1081 阅读 · 0 评论 -
LeetCode_Linked List_Swap Nodes in Pairs
24. Swap Nodes in Pairs1. 问题描述:输入是一个链表,交换两个相邻节点位置,最后返回操作后的新链表。2. 解决思路:该问题主要的环节就是交换操作的过程;所以我们先进行思考,如果要交换两节点的位置,首先需要几个指针去复制暂存元素:pre:指向每次交换两元素的前一个元素; p:交换的两元素的第一个元素; q:交换的两元素的第二个元素;注意:当头节点和其后一个元素交换时,略有不原创 2015-06-29 23:57:32 · 597 阅读 · 0 评论 -
LeetCode_Stack_Simplify Path
71. Simplify Path1. 问题描述:输入一个目录String,要求简化目录并返回。2. 解决思路:题目需要仔细阅读,要求简化路径。所以有几种情况,需要分情况讨论:/./ 不做任何目录操作/../ 跳到上一级目录// 不做任何目录操作这里我们使用stack存储目录名,然后遇到操作符号 ‘/./’,’/../’,’//’,做相应操作,具体看代码。3. java代码:public c原创 2015-07-01 00:50:57 · 625 阅读 · 0 评论 -
LeetCode_Stack_Evaluate Reverse Polish Notation
150. Evaluate Reverse Polish Notation1. 问题描述:有一种叫波兰表示法,它是将操作符至于操作数之前,那么这里是反过来,操作数在操作符之前。 输入是String数组,要求输出最后的计算结果。2. 解决思路:我们使用stack这种数据结构就很容易实现。栈中存放操作数,碰到操作符,即回去取栈顶的元素计算,结果再放回栈中,最后返回栈顶值即是。这里没有说计算无效或者计算原创 2015-07-01 00:38:22 · 757 阅读 · 0 评论 -
LeetCode_Disjoint-Set_Longest Consecutive Sequence
128. Longest Consecutive Sequence1. 问题描述:输入一个未排序的整型数组,找到最长的连续元素序列,并返回其长度。2. 解决思路:拿到这道题,首先想到是先排序,然后遍历找到连续最长的元素。但是我们想通过更好的方式去解决这个问题。所以想到用HashMap存储每个节点的值和这个节点所在序列的长度。当遍历到每个元素时,找当前Map中是否有这个元素的左右连续元素存在,然后计算原创 2015-07-02 22:39:51 · 681 阅读 · 0 评论 -
LeetCode_Stack_Longest Valid Parentheses
32. Longest Valid Parentheses1. 问题描述:输入是只包含“(”和“)”符号的字符串,要求返回有效符号对的最长的长度。这里的有效要求是括号对成对并且连续。 比如“()(())”,这里的括号对都是连续的,所以长度是6。2. 解决思路:有两种思路:动态规划:创建一个和输入String一样长度的整数型数组,每个数组值存储对应输入String对应索引的状态,即从这个字符向后算原创 2015-07-01 20:10:08 · 627 阅读 · 0 评论 -
LeetCode_Surrounded Regions
130. Surrounded Regions一、题目描述题目输入一个X O的矩阵,输出要求被 X 包围的 O 都变成 X。二、解题思路这里说下我的思路,看到这道题我先意识到的是边上的 O 都是不变的,同时和边上 O 连接的 O 也是不变的。于是我们想到把同一类的放在一起,于是想到了并查集。具体请看代码注释。三、java代码public class Solution { //disjoint原创 2015-08-22 04:57:35 · 1368 阅读 · 0 评论 -
LeetCode_DP_Unique Paths II
Unique Paths II一、题目说明这道题目和 Unique Paths (http://blog.youkuaiyun.com/glDemo/article/details/48166685)不同之处在于有了障碍物的情况,也是求有多少条路线从左上角到右下角。二、思路其实主要思路和 Unique Paths 一样,只不过要在遍历中处理碰到障碍物时,到这个点的路径数为 0。三、java代码public cl原创 2015-09-01 23:27:33 · 517 阅读 · 0 评论 -
338. LeetCode_DP_Counting Bits
一、题目Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and return them as an array.Example:For num = ...原创 2016-04-25 00:29:48 · 614 阅读 · 0 评论