
剑指offer
程序鹏
希望在这里可以向IT界大佬学习前沿知识,也可以将自己的所得所学分享给别人。
展开
-
【剑指offer】 4、重建二叉树
问题解析树的遍历有三种:分别是前序遍历、中序遍历、后序遍历。本题是根据前序和中序遍历序列重建二叉树,我们可以通过一个具体的实例来发现规律,不难发现:前序遍历序列的第一个数字就是树的根结点。在中序遍历序列中,可以扫描找到根结点的值,则左子树的结点都位于根结点的左边,右子树的结点都位于根结点的右边。 这样,我们就通过这两个序列找到了树的根结点、左子树结点和右子树结点,接下来左右子树的构建可以进一步通过递归来实现。 举例:Java代码 public TreeNode reC.原创 2020-09-16 09:28:11 · 175 阅读 · 0 评论 -
【剑指offer】 3、从未到头打印链表
问题解析(三种方法:借助栈、递归、列表的首位插入) 从头到尾打印链表比较简单,从尾到头很自然的可以想到先将链表进行反转,然后再打印。但是,通常我们不希望改变原链表的结构,这是一个只读操作。 因此,我们进一步分析,可以发现排在后面的先输出,这是一个典型的“后入先出”的思想,因此很自然的可以想到用栈来实现,每遍历一个结点,可以将其压入栈中,遍历结束后再逐个弹栈,将结点值存入ArrayList,这样就实现了从尾到头的打印。 更进一步,既然想到了用栈,那一定可以通过递归来实现。每访问到原创 2020-09-14 17:19:27 · 174 阅读 · 0 评论 -
【剑指offer】 2、替换空格
问题解析对于这个题目,我们首先想到原来的一个空格替换为三个字符,字符串长度会增加,因此,存在以下两种不同的情况:(1)允许创建新的字符串来完成替换。(2)不允许创建新的字符串,在原地完成替换。第一种情况比较简单。对于第二种情况,有以下两种解法:时间复杂度为O(n^2)的解法。 从头到尾遍历字符串,当遇到空格时,后面所有的字符都后移2个。 时间复杂度为O(n)的解法。 可以先遍历一次字符串,这样可以统计出字符串中空格的总数,由此计算出替换之后字符串的长度,每替换一个空格,长度增加.原创 2020-09-14 16:32:25 · 125 阅读 · 0 评论 -
【剑指offer】 1、二维数组中的查找
二维数组中的查找解析很明显,由于该二维数组上到下递增,左到右递增的特殊性,遍历整个矩阵进行查找不是该题目的意图所在。总结规律我们可以发现:应该从矩阵的右上角或者左下角开始查找。 以右上角为例,首先选取右上角的数字,如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要查找的数字,则说明该列其他元素都大于要查找的数字,便可以删掉该列;如果该数字小于要查找的数字,则说明该行其他元素也都小于要查找的数字,便可以删掉该行。 这样,每一次比较都可以剔除一行或者一列,进而缩小查找范围,时间原创 2020-09-14 16:24:20 · 144 阅读 · 0 评论