摘要: 这个题目应该是一些大公司面试题中经常被问到的,这里我给出一种做法,至于面试官满不满意我就不知道了。我们知道,这种找出前多少个最大或者最小的最适合用堆排序(对堆排序不熟悉的读者可以参考为的这篇博客:堆排序)。但是如果我们用1亿个数去建堆并调整,当然时间复杂度是不允许的。题目中要求前100个大的,那么我 阅读全文
posted @ 2018-08-16 15:51 neu_张康 阅读(1222) 评论(0) 推荐(0) 编辑
摘要: 思想:这种题目一般都会要求o(n)的时间复杂度和o(1)的空间,目的就是为了不让你使用HashMap来统计计算。这里我们可以采用两两消除的思想去实现,例如一个数组arr为:1 2 2 3 2 1 2,那么我们把第一个元素arr[0]当作开始的元素k,它的出现次数count赋值为1,然后从第二个元素a 阅读全文
posted @ 2018-08-16 15:15 neu_张康 阅读(994) 评论(0) 推荐(0) 编辑
摘要: 一、递归版本 思想:假设根结点为root,其中给定的两个结点分别为A和B,它们分别都不为null。如果当前结点p为null,那么直接返回null,如果当前结点p是给定的结点中的其中一个结点,那么直接返回当前结点p(如果p是根结点,程序一次就返回了,下面的递归也不会出现)。如果当前节点不是A和B中的一 阅读全文
posted @ 2018-08-16 14:56 neu_张康 阅读(13105) 评论(0) 推荐(1) 编辑
摘要: 一、递归实现 思想:借助栈结构来保存路径上的结点,首先从根结点开始,一直往左找,如果左边找到就返回true;否则,如果左边找不到并且右子树不为空的情况下再继续往右子树找。如果左右子树都找不到,就弹出栈顶结点并返回false。方法运行完毕后,栈中保存的元素就是一条从根到给定结点的路径。 程序运行结束后 阅读全文
posted @ 2018-08-16 13:23 neu_张康 阅读(12450) 评论(2) 推荐(3) 编辑
摘要: 一、深度 递归版本 非递归版本 思想:二叉树的深度就是指二叉树有几层,那么我们可以使用层序遍历来实现。 二、宽度 思想:二叉树的宽度就是最宽的那一层的节点数,所以还是需要层序遍历的思想,先计算每层的结点数,然后找出最大的。 阅读全文
posted @ 2018-08-16 11:05 neu_张康 阅读(4797) 评论(1) 推荐(0) 编辑
摘要: 思想:前两天面试拼多多Java岗位,手写算法的时候,面试官问了这道题,由于当时比较紧张,另外是用word写的,没有找到感觉。勉强写出来了一半,现在来好好总结一下。首先这题是根据求二叉树宽度延伸而来的,其实大部分关于二叉树的算法题都是由基本的遍历,求深度,宽度,根到节点的路径等等演变而来的。只要把基本 阅读全文
posted @ 2018-08-16 10:17 neu_张康 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 一、先序遍历 先序遍历:根 左子树 右子树 递归版本 非递归版本 二、中序遍历 中序遍历:左子树 根 右子树 递归版本 非递归版本 三、后序遍历 后序遍历:左子树 右子树 根 递归版本 非递归版本 后序遍历的非递归应该比前面两种遍历的非递归要复杂些,当然这里我们还是需要借助栈来实现。由于后序遍历是左 阅读全文
posted @ 2018-08-16 08:54 neu_张康 阅读(282) 评论(0) 推荐(0) 编辑