- 博客(17)
- 资源 (5)
- 收藏
- 关注
原创 Leetcode Convert Sorted List to Binary Search Tree
二分法和中序遍历二叉树的高级结合应用。综合难度指数五星级。难点:1 如何设计二分法的结束条件?2 如何中序先构造左子树,然后构造根节点,然后是右子树?3 如何确定根节点?4 如何返回节点,如何确定返回的节点是左子树还是右子树?5 什么时候递归?好多问题的一个算法设计,但是只要理解透切了,一切问题都可以归结为几行简单的代码。这也叫做编程之美。
2014-02-28 08:02:04 2225
原创 Longest Consecutive Sequence
3到4星级难度。考点:活用hash表利用?:操作可以简化让程序更加简洁。注意:1 数组中的数字会有重复,不要重复处理数据。2 利用hash数据结构存储新增的数字,更新连续数字两边的边界值。3 统计hash表中的最大值。
2014-02-27 10:01:33 1286
原创 Leetcode Unique Binary Search Trees II
五星级难度指数吧。如何处理结束条件?如果构造所有二叉排序树?把递归放进循环里面的思想——这样就可以抽离根节点和左右子树节点熟记这个思想,难度指数可以降低到4星级。思想十分难,程序构造处理并不复杂。
2014-02-25 08:26:42 4148
原创 Leetcode Valid Palindrome
很简单的题目: 2星级。考点:1 会判断是否是字母和数字2 知道什么是Palindrome可以利用函数库判断是否为数字或者字母,程序如下:
2014-02-24 07:50:32 1498
原创 Leetcoe Binary Tree Maximum Path Sum
之前觉得这个是难得一塌糊涂的题目,为五星级难度。但是自从熟悉了递归回溯,树的遍历,二分法这些相关的算法之后,重新思考一下这道题目。觉得难度也不过如此,重新评为3到4星级吧。关键点:1 每个节点的左右子树都必须保留可以连接的值,本程序作为返回值保留,如节点是root, 可以连接的值为root->val, root->val+left_sum, 或者root->val+right_sum;三个值中的最大值。其中left_sum和right_sum分别为左右子树的最大可连接值。2 额外使用一个全局变量r
2014-02-23 09:45:06 1562
原创 Leetcode Sqrt(x)
Implement int sqrt(int x).Compute and return the square root of x.分二分法和牛顿迭代法两种解法
2014-02-22 08:28:51 1538
原创 Leetcode Surrounded Regions
本题关键是理解问题的特点:四面的最外层搜索,有O通路的就为不被包围的区域,其他都可以置为X;没把握这个特点,难度为五星级的。知道这个特点,难度瞬间变为3到4星级。
2014-02-21 08:21:14 1686 3
原创 Leetcode Maximum Depth of Binary Tree
求树最大深度,一个递归就可以了。其本质和求树的高度是一样的。比求最小深度要容易的多,如果求最小深度就需要额外处理一下,如博客:
2014-02-20 09:12:35 1130
原创 Leetcode Word Ladder
五星级难度。难点考点:1 高级树的层序遍历应用2 hash容器unordered_set应用3 如何构造一颗庞大枝叶的树解决问题注意问题:1 如何计算并保存结果2 什么时候返回结果3 什么时候进入下一层,什么时候结束层序遍历4 每一层如何构造
2014-02-19 05:17:12 1391
原创 Leetcode Distinct Subsequences 动态规划法活用总结
动态规划法活用总结:1 二维表:很多问题都可以转化为二维表2 三维表:比较难理解,时间效率一般是O(n*n*n)3 二维表变一维表:一般是简化二维表,不需要保存整个表4 一维表变常量:一般是由一维表简化而来,一维表也不需要保存,只保存当前结果和当前结果需要用的变量就可以5 逆向填表:根据表进一步抽象简化出来,可以让程序更加简洁,当然也更加更加难理解。设计动态规划法算法,应该循序渐进,先设计二维表或三维表,然后再简化,进一步优化,再简化,不要一步就写最简化的程序。熟练之后,可以直接设计表,根据
2014-02-19 05:12:53 2606
原创 leetcode Construct Binary Tree from Preorder and Inorder Traversal
Given preorder and inorder traversal of a tree, construct the binary tree.和construct binary tree from inorder and postorder traversal 的构造方法是一样的。这次是使用preorder数组定位跟节点,利用inorder数组分左右子树。
2014-02-18 07:59:19 1754
原创 Leetcode Binary Tree Zigzag Level Order Traversal
二叉树层序遍历的知识。使用什么容器可以任君选择。关键是考查层与层之间的访问顺序是不一样的,需要做一点特殊处理。总体来说3到4星难度。
2014-02-17 08:08:01 1384
原创 Leetcode Symmetric Tree 递归和非递归解法
和same tree题目差不多一样的解法。1 recursively 递归法:2 iteratively 非递归:使用先序遍历,原来树的先序遍历的非递归写法也不简单。
2014-02-16 01:11:36 15202 1
原创 Leetcode Recover Binary Search Tree
本题注意不能通过测试是否是合法二叉树来修复,而是要通过检查全局二叉树确定哪两个节点的值调换了。检查全局二叉树就是通过检查哪两个值是不按由小到大的顺序的。可以利用额外空间O(n)空间,也可以使用常量空间。要点就是:利用一个数组如vector保存不合法的节点,最后恢复不合法节点。如下面两个程序:
2014-02-12 08:06:14 2113
原创 Leetcode Palindrome Partitioning II
因为我研究了很长时间,没看提示的情况下,观察了各种可能的判断,始终没有找到可行的快捷方法,判断时间效率必定为O(n*n),没有找到什么规律可以提高效率。最后上网搜索也没看到有可行方法。整个题目解决,如果是可以O(n*n*n)时间复杂度是稍微简单点的,不然对动态规划法的运用就要求比较高了。下面程序分两个函数,两步解决问题:函数1 先产生一个回文表,记录了所有子串是回文的表。函数2 判断最小分隔步数
2014-02-07 08:01:09 1790
原创 Geeks 面试题: Longest Bitonic Subsequence
这里的技巧是两边扫描,然后合起来,时间效率也是O(n*n),和求最大递增子段和一样。两边扫描是个经典技巧,一定要记得,掌握。
2014-02-02 07:05:34 2064 1
OpenGL完美的心形
2014-05-28
第一人称3D镜头框架代码
2013-11-02
第一人称3D镜头类
2013-11-02
算法问题集合源文件 堆排序 吊桶排序 最大子段和等
2013-10-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人