随笔分类 -  剑指offer

剑指offer编程题Java实现
摘要:题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 由于二叉搜索树是有序的,左子结点的值小于根节点的值,右子结点的值大于根节点的值。所以在把二叉搜索树转换成排序的双向链表的时候要把左子树中的最大值的右子树指针指向根节点,把右子树中 阅读全文
posted @ 2017-08-07 00:01 知其然,后知其所以然 阅读(400) 评论(0) 推荐(0) 编辑
摘要:题目:请实现一个函数,复制一个复杂链表。 在复杂链表中,每个结点除了有一个next指针指向下一个结点外,还有一个sibling指针指向链表中的任意结点或者nulL 直观解法: 1.遍历链表,复制链表节点,并连接next节点。2.遍历链表,连接sibling节点。对于一个有n个节点的链表,由于定位每个 阅读全文
posted @ 2017-08-06 23:51 知其然,后知其所以然 阅读(515) 评论(0) 推荐(0) 编辑
摘要:题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从根节点开始往下一直到叶节点所经过的节点形成一条路径。 解题思路:当使用前序遍历的方式访问某一节点时,把该节点添加到路径上,并累积该节点的数值。如果该节点为叶节点,并且路径中节点的值等于输入的整数,则找到符合条件的路径。如 阅读全文
posted @ 2017-07-30 17:09 知其然,后知其所以然 阅读(426) 评论(0) 推荐(0) 编辑
摘要:题目:从上往下打印出二叉树的每个节点,同一层的结点按照从左往右的顺序打印。 解题思路:二叉树的层序遍历,在打印一个节点的时候,要把他的子节点保存起来打印第一层要把第二层的节点保存起来, 打印第二层要把第三层的结点保存起来,以此类推。可以使用的容器是队列,每一次打印一个结点的时候,如果该结点有子结点, 阅读全文
posted @ 2017-07-30 15:52 知其然,后知其所以然 阅读(653) 评论(0) 推荐(0) 编辑
摘要:题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是返回true,否则返回false。 假设输入的数组任意两个数字都不相同 解题思路:二叉搜索树的特点是根节点的左子树的值小于等于根节点的值,右子树的结点的值大于等于根节点的值。 在二叉树的后序遍历序列中,最后一个数字是树的根节 阅读全文
posted @ 2017-07-30 15:49 知其然,后知其所以然 阅读(485) 评论(0) 推荐(0) 编辑
摘要:二叉树的遍历方式: 1、深度优先:递归,非递归实现方式 1)先序遍历:先访问根节点,再依次访问左子树和右子树 2)中序遍历:先访问左子树,再访问根节点吗,最后访问右子树 3)后序遍历:先访问左子树,再访问右子树,最后访问根节点 2、广度优先 按照树的深度,一层一层的访问树的节点 阅读全文
posted @ 2017-07-30 15:19 知其然,后知其所以然 阅读(11805) 评论(0) 推荐(1) 编辑
摘要:题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的。解题思路:两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中。 可以有递归、循环两种方式来解决。 阅读全文
posted @ 2017-07-30 11:30 知其然,后知其所以然 阅读(1082) 评论(0) 推荐(0) 编辑
摘要:题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。解题思路:单向链表只能实现单向遍历,改变链表方向就是要把当前链表的节点指向它的前一个节点,一旦当前链表指向发生了变化,就不能根据此节点获取到它后面的节点,所以在改变方向前要保存当前节点的下一节点,防止链表断开,因此需要三 阅读全文
posted @ 2017-07-25 23:52 知其然,后知其所以然 阅读(502) 评论(0) 推荐(0) 编辑
摘要:题目:输入一个链表,输出该链表的倒数第K个节点。为了符合大多数人的习惯,本题从1开始计数,即链表尾节点是倒数第一个节点。 解题思路: 解法一:一般情况下,单向链表无法从后一个节点获取到它前面的节点,可以通过两次遍历,第一次遍历获取链表中节点的个数,第二次遍历找到链表中第n-k+1个节点,就是链表的倒数第k个节点。但是这种方法效率低,可以使用一次遍历得到倒数第K个节点 解法二:一次遍历得到倒数第K个... 阅读全文
posted @ 2017-07-25 23:03 知其然,后知其所以然 阅读(429) 评论(0) 推荐(0) 编辑
摘要:题目: 输入一个整数数组,实现一个函数来调整该数组中数组的顺序,使得所有的奇数位于数组的前半部分,偶数位于数组的后半部分。 解题思路:数组中维护两个指针,第一个指针初始化时候指向数组头部,第二个指针初始化时候指向数组尾部,第一个指针指向的数字总是偶数,第二个指针指向的数字总是奇数,如果第一个指针在第 阅读全文
posted @ 2017-03-11 11:26 知其然,后知其所以然 阅读(2590) 评论(0) 推荐(0) 编辑
摘要:题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。 由于给定的是单向链表,正常删除链表的时间复杂度是查找链表的时间复杂度即O(n),如果要求在O(1)时间复杂度内删除节点,通过遍历链表找到该节点的上一节点和下一节点的方法是行不通了。所以实现的思路是,根据给定的要删除的节 阅读全文
posted @ 2017-03-10 18:47 知其然,后知其所以然 阅读(4750) 评论(6) 推荐(0) 编辑
摘要:用字符串或者数组表示大数是一种很简单有效的表示方式。在打印1到最大的n为数的问题上采用的是使用数组表示大数的方式。在相关题实现任意两个整数的加法、减法、乘法的实现中,采用字符串对大数进行表示,不过在具体的计算中,还是要将字符串转化成字符数组来进行计算。 实现两个大数的加法,要考虑到两个问题,两个数的 阅读全文
posted @ 2017-03-05 19:33 知其然,后知其所以然 阅读(2066) 评论(0) 推荐(0) 编辑
摘要:题目:打印1到最大的n位数 输入数字n,按顺序打印输出从1到最大的n位十进制数,比如输入3,打印从1到999. 这道题考察的地方是如何表示大数问题。由于n是任意大的数组,如果n太大的话n位数就超过了long型能够表示的范围,在面试题11求数值的整数次方的时候题目中已经明确的提示了不考虑大数问题,在这 阅读全文
posted @ 2017-03-05 17:52 知其然,后知其所以然 阅读(1580) 评论(0) 推荐(0) 编辑
摘要:题目: 实现函数double power(double base,int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 解题思路:最一般的方法实现数值的n次方就是将一个数自身连乘n次底数要考虑到正数、负数和零的情况指数要考虑到正整数,负整数和零的情况 阅读全文
posted @ 2017-03-01 16:19 知其然,后知其所以然 阅读(1709) 评论(0) 推荐(0) 编辑
摘要:题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变成0,与运算进行多少次就有多少个1。 阅读全文
posted @ 2017-02-27 17:20 知其然,后知其所以然 阅读(1810) 评论(0) 推荐(0) 编辑
摘要:题目:写一个函数,输入n,求斐波那契数列的第n项。 阅读全文
posted @ 2017-02-26 19:01 知其然,后知其所以然 阅读(2501) 评论(0) 推荐(0) 编辑
摘要:剑指offer面试题8:旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1 旋转数组的特点: 1,旋转之后的数组可以分为两个排序的子数组,且前面的子数组的元素都大于或等于后面子数组的元素。 ... 阅读全文
posted @ 2017-02-26 18:58 知其然,后知其所以然 阅读(1159) 评论(0) 推荐(0) 编辑
摘要:剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()-1份元素poll出来,添加到另为一个为空的队列中,再把队列中最后的元素poll出来两个队列在栈不为空 阅读全文
posted @ 2017-02-26 18:54 知其然,后知其所以然 阅读(1808) 评论(0) 推荐(0) 编辑
摘要:题目:用两个栈实现一个队列。队列的声明如下:请实现他的两个函数appendTail和deleteHead, 分别完成在队列尾部插入节点和在队列头部删除节点的功能。 package Solution; import java.util.Stack; /** * 剑指offer面试题7:用两个栈实现队列 * 题目:用两个栈实现一个队列。队列的声明如下:请实现他的两个函数appendTail... 阅读全文
posted @ 2017-02-26 18:51 知其然,后知其所以然 阅读(2084) 评论(0) 推荐(0) 编辑
摘要:题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出二叉树并输出他的根节点。 在二叉树的前序遍历中,第一个数字总是树的根节 阅读全文
posted @ 2017-02-26 13:52 知其然,后知其所以然 阅读(4558) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示