摘要: 问题:给定一个数组和整数 k ,判断是否存在两个相等元素,并且两个相等元素的下标差在 k 以内? 问题问是否存在一个子数组满足某种条件,首先想到的是滑动窗口(sliding window)的模型 阅读全文
posted @ 2016-01-17 19:10 TonyYPZhang 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 问题:给定一个拥有树性质的无向图,图的每一个节点都可以视为一棵树的根节点。在所有可能的树中,找出高度最小的树,并返回他们的树根。 除了 DP 方案,没有想到其他思路,在网上借鉴了其他了的想法,理解后实现通过。 这个思路实际上是一个 BFS 思路。和常见的从根节点进行 BFS 不同,这里从叶子节点开始进行 BFS。 所有入度(即相连边数)为 1 的节点即是叶子节点。找高度最小的节点,即找离所有叶子节点最远的节点,也即找最中心的节点。 找最中心的节点的思路很简单: 每次去掉当前图的所有叶子节点,重复此操作直到只剩下最后的根。 阅读全文
posted @ 2016-01-12 00:37 TonyYPZhang 阅读(3671) 评论(0) 推荐(0) 编辑
摘要: 问题:找出矩阵中前后左右相邻为 1 的区域块块数。 属于 DFS 思想。 将所有 1 塞进一个容器中,从容器中取出一个 1 ,并将相邻走完的 1 也从容器中取出,视为一次取数。重复此操作直至容器中没有元素 1 ,则取出次数就是 1 的区域块块数。 阅读全文
posted @ 2016-01-10 20:26 TonyYPZhang 阅读(532) 评论(0) 推荐(0) 编辑
摘要: 问题:给定一个二叉树,判断其是否平衡。 当二叉树中所有节点的左右子树高度差不大于 1 时,这个二叉树视为平衡二叉树。 解题思路应该算一种分治思想。根据定义,递归地判断,实现判断。 阅读全文
posted @ 2016-01-10 20:13 TonyYPZhang 阅读(589) 评论(0) 推荐(0) 编辑
摘要: 问题:已知课程数量,以及各个课程间的依赖关系,求是否可以满足所有依赖关系把课程上完。 这是典型的拓扑排序应用场景。是否满足所有依赖关系,实际上就是求,在课程为节点、依赖关系为边的图中,是否存在环。若存在还,则不可能满足所有依赖关系把课程上完,反之,则可能。 阅读全文
posted @ 2016-01-10 17:09 TonyYPZhang 阅读(504) 评论(0) 推荐(0) 编辑
摘要: 问题: 给定一个二叉树,将树元素的 *next 指向该元素在树结构中的水平右边节点。 这是广度遍历的一个应用。可以借组队列结构实现广度遍历,求解题目。 阅读全文
posted @ 2016-01-10 11:04 TonyYPZhang 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 问题:给定一个二叉树,树的每个节点都只包含一个数字 0-9,将根节点到叶子节点路径上的元素值组合成一个整数,求所有整数和。 这是一道深度遍历的应用。深度遍历二叉树一般是递归遍历,或者借助栈遍历。每到达一个叶子节点,都需要重新遍历一次根节点到该叶子节点路径的值,借组栈遍历可以实现满足这个需要。 阅读全文
posted @ 2016-01-10 10:39 TonyYPZhang 阅读(426) 评论(0) 推荐(0) 编辑
摘要: 问题:找出二叉搜索树种第 k 小的元素。 一个深度遍历的应用。使用递归、或者借助栈都可以实现深度遍历。本文代码使用递归实现。 阅读全文
posted @ 2016-01-10 10:30 TonyYPZhang 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 问题:给定一个无序数组,找出数组排序后的相邻元素最大间隔。要求 O(n) 时间复杂度,O(n)空间复杂度 解题思路: 思路一:将所有数组全部排序,再一次遍历求得最大的相邻元素间隔值即可。但是排序算法的最小时间复杂度也需要 O(n*logn) ,无法满足要求。 思路二:题目只需要求出最大相邻间隔,可以利用桶排序,避免求出全部元素大小顺序,而得到结果。时间复杂度降低为 O(n)。 阅读全文
posted @ 2016-01-10 01:16 TonyYPZhang 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 问题:对一个单列表排序,要求时间复杂度为 O(n*logn),额外空间为 O(1)。 O(n*logn) 时间排序算法,无法是 quick sort, merge sort, head sort。quick sort 需要灵活访问前后元素,适合于数组,merge sort 只需要从左到右扫过去即可,可用于列表结构。 阅读全文
posted @ 2016-01-06 01:46 TonyYPZhang 阅读(967) 评论(0) 推荐(0) 编辑