摘要: 给定一个BST的根节点, 试判断此BST是否为符合规则的BST?规则: 对于一个BST的节点,它左侧的所有节点(包括子节点)必须小于它本身;它右侧的所有节点(包括子节点)必须大于它本身;它的左右节点也必须满足上面两条.算法思路: 对于给定的根节点N, 先找到它左子节点L的最底层的右子节点MR, 比较... 阅读全文
posted @ 2014-09-09 14:16 Lancelod_Liu 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 给定一个链表和两个整数m, n, 翻转链表第m个节点到第n个节点(从1开始计数).如, 给定链表:1->2->3->4->5->NULL, 以及 m = 2, n = 4.返回1->4->3->2->5->NULL.假定m和n满足约束条件:1 ≤m≤n≤ 链表长度.注意: 不能使用额外空间, 且只能... 阅读全文
posted @ 2014-09-04 21:56 Lancelod_Liu 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 给定一列数(未排序)和一个目标值, 找出所有可能的组合和等于目标值的组合, 数组中的数可以重复使用.算法思路: 使用递归.对数组排序, 从小到大;令i = 起始下标(初始为0), 对于每一个数,如果它等于目标值, 则在缓存结果中加入此数并将缓存结果加入输出队列, 随后在缓存结果中删除此数;如果它小于... 阅读全文
posted @ 2014-08-29 17:01 Lancelod_Liu 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 给定一组数(未排序, 可能有重复元素), 求出所有可能的组合.算法和无重复元素的相似.唯一需要注意的是, 如果当前的数字和之前的相同, 算法就只会在结尾数字是此数字的组合后加上此数字.比如现在是[[] [1] [1 2] [2]], 当前数字是2, 就只会增加[1 2 2] [2 2]代码: 1 c... 阅读全文
posted @ 2014-08-29 11:39 Lancelod_Liu 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 给定一组数(未排序), 求它们的所有组合可能.如给定{1 2 3}, 返回:[ [] [1] [2] [3] [1 2] [1 3] [2 3] [1 2 3] ]算法思路:对数组排序, 从小到大;令 i = 0, 对已有组合v从后往前进行如下操作v的最后1个组合内加入第i个元素;将新组合加入到v中... 阅读全文
posted @ 2014-08-29 11:22 Lancelod_Liu 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 给定一个整数数组(长度不小于3) 和 一个目标值, 从数组中找出3个元素, 使得它们的和与目标值最接近, 返回这个和. 可以认为每个输入的组合都是只有唯一解的.解法思路参考: Finding three elements in an array whose sum is closest to an ... 阅读全文
posted @ 2014-08-28 21:59 Lancelod_Liu 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 给定有序链表(元素由小到大), 试问如何将其转换为一个平衡BST?平衡BST: 任意节点的左右子树的深度差值不大于1.主要思想是用递归. Trick是使用快慢指针来获取中间节点. 获得中间节点后, 将其设为此次递归的root, 随后删除此节点, 并将前一节点的next置NULL. 随后, 对中间节点... 阅读全文
posted @ 2014-08-28 10:23 Lancelod_Liu 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 给定一个链表头, 探测其是否有环, 如果没有返回NULL, 如果有返回环开始的位置.环开始的位置定义为被两个指针指向的位置.算法描述:1. 快慢指针遍历, 如果到头说明无环返回NULL, 如果相遇说明有环, 进入2.2. 慢指针回到起点, 快慢指针每次移动一格直到相遇, 返回快指针/慢指针.代码: ... 阅读全文
posted @ 2014-08-22 10:05 Lancelod_Liu 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 给定n个数: a1, a2, ... , an. 代表着(i, ai)个点, 连接这些点与对应的(i, 0), 我们可以得到n条线. 请在这n条线中找出2条, 使得这两条线和x轴构成的容器能够容纳最多的水.本题解法时间复杂度为O(n), 作者是n00tc0d3r.我们使用2个指针从数组前后开始遍历,... 阅读全文
posted @ 2014-08-15 17:10 Lancelod_Liu 阅读(314) 评论(0) 推荐(1) 编辑
摘要: 给定n, 返回所有匹配的n对括号的可能形式. 如给定n= 3, 一个解集是:"((()))", "(()())", "(())()", "()(())", "()()()"本题解法的思路是使用栈seq保存经历的字符串状态;使用栈valid保存对应的字符串中有效的括号对个数;当seq不为空时(即回溯未... 阅读全文
posted @ 2014-08-14 16:37 Lancelod_Liu 阅读(314) 评论(0) 推荐(0) 编辑