leetcode
文章平均质量分 86
mnmlist_tata
这个作者很懒,什么都没留下…
展开
-
leetcode_94_Binary Tree Inorder Traversal
2.思路a.先遍历左子树直至左孩子为空b.然后看当前节点的右子树是否为空,为空,则访问当前节点,弹出当前节点,重新判断;不为空,访问当前节点,然后将当前节点弹出,并将当前节点的右孩子进栈,返回ac.这中间需要注意的是,在弹出当前节点后,在获得栈顶的当前节点前先判断下栈是否为空原创 2015-03-16 20:49:49 · 1117 阅读 · 0 评论 -
leetcode_112_Path Sum
思路:由于是root-to-leaf,马上就想到了后序遍历,直接遍历到叶子节点,把从根节点到叶子节点的值统计一下看其和是否等于sum,相等的话则返回true,不等的话继续遍历直到下一个叶子节点。。。循环直至遍历结束。只是感觉,这么简单的一个题目,用后序遍历来解,杀鸡用牛刀?这感觉还挺不错!大笑忽然感觉,这树的几种遍历方式可真的很有用。原创 2015-03-26 20:16:51 · 734 阅读 · 0 评论 -
leetcode_102_Binary Tree Level Order Traversal
一般的层序遍历直接打印出结果,用队列即可,但是此次的要求尼是按层次打印结果,所以考虑到用两个队列来交替存储,遍历上一层次的同时将下一层的结点存储到另一个队列中,并在将上面一层的遍历完成后交换两个队列的值。原创 2015-03-20 13:58:40 · 1336 阅读 · 0 评论 -
leetcode_107_Binary Tree Level Order Traversal II
一般的层序遍历直接打印出结果,用队列即可,但是此次的要求尼是按层次打印结果,所以考虑到用两个队列来交替存储,遍历上一层次的同时将下一层的结点存储到另一个队列中,并在将上面一层的遍历完成后交换两个队列的值。最后,将结果列表调换下顺序即可。原创 2015-03-20 14:17:07 · 829 阅读 · 0 评论 -
leetcode_113_Path Sum II
思路:大致思路就是将pathsum 1中的存储节点的栈stack换成具有栈功能的LinkedList,这样每匹配依次将各个节点的值存储到一个list中,遍历完整棵树后返回一个满足条件的结点列表的列表。原创 2015-03-26 20:24:43 · 790 阅读 · 0 评论 -
leetcode_108_Convert Sorted Array to Binary Search Tree
思路:思路就是按二分查找的思路进行中序建树,递归建树。原创 2015-03-26 20:30:33 · 755 阅读 · 0 评论 -
leetcode_129_Sum Root to Leaf Numbers
思路:和pathsum系列是一个思路,后序遍历至某个节点,将root-to-leaf的所有结点的值表示成一个数和sum相加,直至遍历完所有的leaf结点,返回sum。原创 2015-03-26 20:37:07 · 909 阅读 · 0 评论 -
leetcode_98_Validate Binary Search Tree
思路:由于二叉排序树和对二叉树的中序遍历所形成的值是有序的是充分必要条件,所以仅需对二叉树进行中序遍历即可,并将遍历的结点的值存储到一个list中,然后依次比较list中的值,是有序的则二叉树为二叉排序树,否则则不是。当然,一个更好的方法是用一个temp暂存上一个结点的值,然后依次进行比较即可。原创 2015-03-26 20:48:01 · 771 阅读 · 0 评论 -
leetcode_144_Binary Tree Preorder Traversal
具体思路和中序遍历是一致的,只是访问结点的值的时机不同罢了,具体思路参见:http://blog.csdn.net/mnmlist/article/details/44312315原创 2015-03-20 14:41:11 · 871 阅读 · 0 评论 -
leetcode_103_Binary Tree Zigzag Level Order Traversal
思路:具体的思路和层序遍历一致,只是需要将偶数层的结点值颠倒一下即可,时间略长,可见本方法并非好的方法。思路详见层序遍历:http://blog.csdn.net/mnmlist/article/details/44490975原创 2015-03-20 15:10:34 · 834 阅读 · 0 评论 -
使用Java中Comparator接口实现自定义排序
一般情况下,自己动手写一个简单排序程序还是没有问题的,但是你能保证写出来的排序程序的时间复杂度吗?你能保证程序的正确性吗,鲁棒性呢,还有程序结构的清晰性,可维护性.......综上所述,学习一下排序接口来实现对复杂对象的排序还是很有必要的。Java中有两个用来实现排序的接口Comparator和Comparable接口,本人比较喜欢使用java的Comparator接口,在程序里实现Comparator接口里的compare(Object o1,Object o2)方法,然后在程序中通过调用Arrays.s原创 2015-03-29 10:41:07 · 1441 阅读 · 0 评论 -
leetcode_99_Recover Binary Search Tree
思路:首先中序遍历二叉查找树并将遍历的节点存储到一个list中,然后对list中的值进行比较,查找出位置出现变化的两个结点,将两个结点的值进行互换,完成本题的要求。但是呢,对于如何发现位置出现变化的两个结点是本题的重点和难点,具体判断条件可以参见下面的程序,最后对查到的结点进行取舍也是一大问题,一般符合判断条件的结点会出现三个,我取的是第一个和第三个,这不好讲清楚,具体可自行推敲。原创 2015-03-29 11:06:17 · 941 阅读 · 0 评论 -
leetcode_117_Populating Next Right Pointers in Each Node II
思路:就是用两个list存储相邻两层的结点,把第i+1层结点存储到list中的同时,分别将第i层的各个节点指向下一个,跟Populating Next Right Pointers in Each Node I一个思路。原创 2015-03-29 10:53:43 · 899 阅读 · 0 评论 -
leetcode_23_Merge k Sorted Lists
思路:本来想模仿合并两个链表的方法,查找所有的lists链表一遍找出一个最小值,并将最小值链接到结果链表中,并将最小结点删除,将最小结点的next结点替代之,直至为null,将链表删去。但是当lists.size()比较大时,时间复杂度就上来了,而且每次只能选一个最小结点,O(N*N)的节奏。。。所以,想到不就是排序么,将所有的结点集合到一起,然后对其进行快速排序不就可以了么,啊哈,真的是这样,bravo!很显然,这种方法肯定不是最优方法,但是时间复杂度也只是O(N*logN),也是可以接受的。原创 2015-03-23 20:59:32 · 1008 阅读 · 0 评论 -
leetcode_114_Flatten Binary Tree to Linked List
思路:按照中序遍历的方式将结点存储到一个list列表中,然后分别将各个节点的left赋值为空,将right指向下一个节点,最后将最后一个结点的right赋值为空即可生成题目要求的树结构。结果对了是对了,好像不太符合题目要求,题目要求 do it in-place,不知道我的算不算in place。很显然,从时间上来看,我想到的思路也不能算好。刚开始以为是要生成一个链表,走了好多弯路,发现返回值就是一个void,题目要实现的就是改变下树是结构而已。原创 2015-03-24 14:59:19 · 801 阅读 · 0 评论 -
leetcode_104_Maximum Depth of Binary Tree
思路:用递归,很简单,树为空时返回0,左子树为空且右子树为空时返回1,否则就返回左子树或右子树的最大深度再加1原创 2015-03-24 14:36:45 · 820 阅读 · 0 评论 -
leetcode_111_Minimum Depth of Binary Tree
思路:和求最大深度思路是类似的,只是题目要求的最小深度是到最近的叶子节点的最小深度,所以当一个节点的深度为0时,很显然是没有叶子节点的,应该取另外一个num并加1原创 2015-03-24 14:42:09 · 796 阅读 · 0 评论 -
leetcode_100_Same Tree
思路:由于这题标识为easy,判断两棵树是否相等,想到了用递归。有这几种可能,两棵树相等的充要条件为root的值相等&&左子树相等&&右子树相等,两棵树都为空时也相等,其中一棵为空时就不相等原创 2015-03-24 14:18:40 · 775 阅读 · 0 评论 -
leetcode_101_Symmetric Tree
思路:判断一棵树是否是左右对称的,用这样几种可能,左右子树都为空时对称,左右子树有一个不为空时不对称,子树结点值相等&&左子树的左孩子的结点值等于右子树的右孩子的结点值&&左子树右孩子的结点值等于右子树左孩子的结点值,OK!原创 2015-03-24 14:27:32 · 913 阅读 · 0 评论 -
leetcode_110_Balanced Binary Tree
思路:走了好多弯路,最后才发现直接根据定义来就可以了,左右子树的深度不超过1且左右子树都是平衡二叉树,就是这么简洁明快。原创 2015-04-03 15:31:15 · 663 阅读 · 0 评论 -
leetcode_105_Construct Binary Tree from Preorder and Inorder Traversal
思路:1.将中序遍历序列和其对应的下标存储到一个map中,方便下面的查找2.递归选取前序序列的第一个元素作为树的根节点,然后查找根节点在前序序列中位置inorderIndex,inorderIndex-startInorder可以得到左子树的长度3.根据左子树的长度和startPreOrder可以求出前序序列中左子树的起始位置4.从上面可以求出左右子树的前序序列和中序序列的起始位置,递归调用建树过程即可。PS:其实,对于这道题,有更简单的方法,可根据按前序序列元素出现的顺序依次作为树的根节点进行原创 2015-04-03 14:51:57 · 866 阅读 · 0 评论 -
leetcode_145_Binary Tree Postorder Traversal
思路:刚开始的时候由于刚做出前序和中序的遍历,落入这两种遍历的窠臼,总以为在中序遍历的基础上改改就可以了,但是,改了好久,费了了好大的劲,走了好多弯路,in vain!最后联想到后序遍历不就是在中序遍历的基础上,经由子树根节点访问右子树,然后再访问根节点,不是么?所以,想到再多用一个栈来标记是否是第一次访问子树根节点,第二次访问子树根节点时(当然不算第一次将所有左子树入栈的那一次)就存储根节点的值。bravo!It's done!原创 2015-03-25 08:39:58 · 788 阅读 · 0 评论 -
leetcode_106_Construct Binary Tree from Inorder and Postorder Traversal
思路:1.将中序遍历序列和其对应的下标存储到一个map中,方便下面的查找2.递归选取后序序列的倒数第一个元素作为树的根节点,然后查找根节点在后序序列中位置inorderIndex,endInorder-inorderIndex可以得到右子树的长度3.根据右子树的长度和endPreOrder可以求出后序序列中右子树的起始位置4.从上面可以求出左右子树的后序序列和中序序列的起始位置,递归调用建树过程即可。原创 2015-04-03 14:59:49 · 821 阅读 · 0 评论 -
leetcode_173_Binary Search Tree Iterator
思路:这道题想了好久,知道用中序遍历来解决,用一个list将遍历的元素存储起来一下就解决了,但是空间复杂度不行。具体怎么解决,如何控制程序的终止困扰了我好久。知道我想起来至多用O(h) memory,我想到了直接把一趟遍历后返回开始之前的所有元素存储起来不就正好符合题目要求了么,bravo!原创 2015-04-03 15:14:24 · 795 阅读 · 0 评论 -
leetcode_96_Unique Binary Search Trees
思路:这一道题呢,刚开始完全没有思路,拿笔在草纸上这样演算,那样演算,但是没有思路。这是一个二叉查找树,所以题眼很可能就是在这里,在网上一查还真是这样。由于这是一棵二叉查找树,所以当一棵树形态固定下来后,该树是唯一的。由于根节点的值大于左子树上的任何一个结点的值,小于右子树上任何一个结点的值,所以,当某个节点被当作树的根节点时,树的形态个数有num(root.left)*num(root.right)个,从num_0,num_1,num_2开始迭代计算即可。原创 2015-04-03 15:25:42 · 665 阅读 · 0 评论 -
leetcode_Validate Binary Search Tree
思路:由于二叉排序树的中序遍历序列是有序的,所以考虑在遍历的过程中通过判断遍历序列是否有序从而来判断该排序树是否有效,但这又涉及到第一个元素的问题,所以可以设一个比Integer.MAX_INT还小的值作为参考值或者设一个flag来判断是否是第一个值,第一个值直接跳过即可。原创 2015-04-04 20:39:30 · 709 阅读 · 0 评论 -
leetcode_Min Stack
思路:本题目的解法是用到了两个栈,一个用来存元素,另一个用来存最小元素,元素入栈时和minStack栈里面的栈顶元素相比,小于栈顶元素则存入,大于栈顶元素则栈顶元素(当前元素中的最小值)入栈。其中,需要注意的是元素出栈时,要随时更新当前栈中的最小元素min=minStack.top()原创 2015-04-04 20:47:55 · 802 阅读 · 0 评论 -
leetcode_Climbing Stairs
思路:变形的斐波那契原创 2015-04-04 20:53:12 · 767 阅读 · 0 评论 -
leetcode_Number of 1 Bits
思路:java中如何表示无符号整数呢,很伤,那就用C写吧。二进制与运算和二进制循环移位搞定原创 2015-04-08 20:25:58 · 835 阅读 · 2 评论 -
leetocde_Binary Tree Right Side View
思路:按层序遍历的思路,每次只保存该层的最后一个元素即可。原创 2015-04-08 20:29:29 · 693 阅读 · 0 评论 -
leetcode_Letter Combinations of a Phone Number
思路:本题目要实现的效果就是产生一系列广义有序的字符串序列,本来想假如知道digits字符串长度的话,可以搞一个n层循环,但是digits的长度是未知的。想了好久,想到了用递归来实现本题目要实现的功能,每个数字循环到数字所代表字符的个数大小时,返回上一级递归,然后再在上一级的循环层次计数上再加1即可。当字符的长度等于digits的长度时,说明已经产生一组有效的字符串,存储起来,然后将最后一个字符删除,继续循环。。。。最后,当index<0时,说明整个循环已经结束,over!但是在具体实现的过程中,递原创 2015-04-09 21:06:16 · 817 阅读 · 0 评论 -
leetcode_Gray Code
1.n位格雷码对应有1<<n个数2.每个数字对应的格雷码的对应的计算公式为:i^(i/2)原创 2015-05-15 10:31:33 · 510 阅读 · 0 评论 -
leetcode_Trapping Rain Water
思路:动态规划题目1.从左至右算出每个点的左方的最大值2.从右至左算出每个点的右方的最大值3.从左至右循环sum+=min(leftMax[i]+rightMax[i])-arr[i]4.sum的值就是所能储存的最大水量原创 2015-05-15 11:20:09 · 573 阅读 · 0 评论 -
leetcode_Factorial Trailing Zeroes
一般来讲,.5*2 .5 *4 .5*8 .....可以获得末位是0的情况,同理25*2 25*4 ...所以仅需递归地求出从1到n中,5的个数,25的个数,125的个数,625的个数。。。即可原创 2015-05-15 09:50:37 · 409 阅读 · 0 评论 -
leetcode_Happy Number
很简单的思路,用一个HashSet存储计算的结果直至出现循环,剩下的就是计算一个整数的各个位数的数字和对这些数字进行求和了。原创 2015-05-15 10:20:19 · 548 阅读 · 0 评论 -
leetcode_Add Binary
描述:Given two binary strings, return their sum (also a binary string).For example,a = "11"b = "1"Return "100".思路:将字符串从后向前进行相加,最后有进位的话再创造新的位数,最后将字符串反转,输出即可。原创 2015-05-15 08:16:34 · 879 阅读 · 0 评论 -
leetcode_Bitwise AND of Numbers Range
描述:Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.For example, given the range [5, 7], you should return 4.思路:由于相邻的两个数最低位肯定有0有1,所以直接and肯定为0,所以可以通过直接and来和向右移位获得一个区间内的相同的位数,最后再通过向左原创 2015-05-15 08:56:35 · 899 阅读 · 0 评论 -
leetcode_Best Time to Buy and Sell Stock
简而言之,这就是一个求数组最大和的问题,动态规划原创 2015-05-15 09:56:12 · 468 阅读 · 0 评论 -
leetcode_Best Time to Buy and Sell Stock III
给两层交易机会,让求最大的利润,先从左向右求到当前节点的最大利润并将其存储到一个数组profit1[ ]中,然后从右向左求到当前节点的最大利润并将其存储到一个数组profit2[ ]中,然后从前向后遍历求到某个节点时其左右部分的利润相加,然后和当前最大利润相比从而得出最大利润。原创 2015-05-15 10:07:56 · 576 阅读 · 0 评论 -
leetcode_House Robber
动态规划问题,只需要保证当前获得的就是最大的值就可以了原创 2015-05-15 09:07:01 · 842 阅读 · 0 评论