自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 剑指offer 面试题37 序列化二叉树

序列化二叉树题目请实现两个函数,分别用来序列化和反序列化二叉树。class BinaryTreeNode {int value;BinaryTreeNode left;BinaryTreeNode right;}思路使用前序遍历来遍历一棵树,写出该树的序列。代码public class BinaryTreeSerialize { //序列化 public vo...

2019-04-02 18:09:54 112

原创 剑指offer 面试题36 二叉搜索树与双向链表

二叉搜索树与双向链表题目输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建新的结点,只能调整树中结点指针的指向。class BinaryTreeNode {int value;BinaryTreeNode left;BinaryTreeNode right;}思路我们可以中序遍历树中的每一个结点,这是因为中序遍历算法的特点是按照从小到大的顺序遍历二叉树的每一...

2019-04-02 10:54:38 132

原创 分解质因数

题目将一个正整数分解质因数。例如:输入90,打印出90=233*5。思路对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印即可。(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步...

2019-03-28 17:00:26 121

原创 剑指offer 面试题35 复杂链表的复制

复杂链表的复制题目复制一个复杂链表。在复杂链表中,每个节点除了有一个next指向下一个节点外,还有一个sbiling指向链表中的任意节点或者null。class Node{int value;Node next;Node sbiling;}思路第一步:根据原始链表的每个结点N创建对应的N’,并把N’连在N的后面第二步:B’.sbiling就记录在了B.sbiling.next...

2019-03-26 11:53:18 125

原创 剑指offer 面试题34 二叉树中和为某一值的路径

二叉树中和为某一值的路径题目输入一棵二叉树和整数,打印出二叉树中节点值得和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。二叉树的定义如下:public class BinaryTreeNode{int value;BinaryTreeNode left;BinaryTreeNode right;}思路我们使用前序遍历的方式访问某一结点,我们就把...

2019-03-26 10:25:35 102

原创 剑指offer 面试题33 二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路在后序遍历得到的序列中,最后一个数字是树的根节点的值。数组中前面的数字可以分为两部分:一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们都比根节点的值大。代码public boolean Ve...

2019-03-25 19:29:38 207

原创 剑指offer 面试题32 从上到下打印二叉树

从上到下打印二叉树题目一不分行从上到下打印二叉树:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。class BinaryTreeNode{int value;BinaryTreeNode left;BinaryTreeNode right;}思路使用队列来完成,打印的同时也在往里面加入。代码public void fun(BinaryTreeNode r...

2019-03-23 22:27:28 69

原创 剑指offer 面试题31栈的压入、弹出序列

栈的压入、弹出序列题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。思路判断一个序列是不是栈的弹出序列的规律:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出;如果下一个...

2019-03-23 21:52:24 145

原创 剑指offer 面试题30 包含min函数的栈

包含min函数的栈题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1).思路我们利用一个辅助栈,每次将要插入的元素和栈顶的元素进行比较,辅助栈中插入两者的最小值。代码public class MinStack{ Stack<Integer> data = new Stack<Int...

2019-03-23 19:57:24 81

原创 剑指offer 面试题29 顺时针打印矩阵

顺时针打印矩阵题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:1, 2, 3, 45, 6, 7, 89, 10,11,1213,14,15,16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路首先,由外圈到内圈打印,我们把矩阵划分成若干个矩形,由外向内。我们每次可以打印一个矩形。接下来分...

2019-03-23 17:55:08 126

原创 剑指offer 面试题21 调整数组顺序使奇数位于偶数前面

调整数组顺序使奇数位于偶数前面题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路使用两个指针,从一前一后进行判断,前偶后奇,则交换位置,否则不变。代码public void reOrderOddEven(int[] array){ int length =...

2019-03-16 16:43:35 83

原创 剑指offer 面试题20 表示数字的字符串

表示数字的字符串题目请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”±5”和”12e+4.3”都不是。思路数值的字符串遵循模式A【.【B】】【e|EC】或者.B[e|EC],其中A是整数部分,B是小数点部分,C是指数部分。A和C...

2019-03-16 16:28:48 80

原创 剑指offer 面试题19 正则表达式匹配

正则表达式匹配题目请实现一个函数用来匹配包含’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。本题中,匹配是指字符串的所有字符匹配整个模式。 例如, 字符串“aaa”与模式‘a.a’和“abaca”匹配,但与“aa.a”和“ab*a”均不匹配。思路每次从字符串中拿出一个字符和模式中的字符去匹配,如果相等或者模式中的字符串是’.’,...

2019-03-16 15:47:58 94

原创 剑指offer 面试题18 删除链表的节点

删除链表的节点题目1. 在O(1)时间内删除链表节点给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。链表节点与函数的定义如下:public static class ListNode{public int data;public ListNode next;public ListNode(int data, ListNode next){this.data...

2019-03-15 11:20:56 89

原创 剑指offer 面试题17 打印从1到最大的n位数

打印从1到最大的n位数题目输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999思路首先考虑n的范围,当输入n很大的时候,我们求最大的N位数用int或者long都会溢出。最常用也是最容易的方法是用字符串或者数组表达大数。我们用字符串来解决大数问题。代码public void Print1ToMaxOfDigits(int n){ i...

2019-03-14 22:15:24 105

原创 剑指offer 面试题16 数值的整数次方

数值的整数次方题目实现函数double Power(double base, int exponent), 求base的exponent次方。思路分情况考虑,分指数大于0或小于0代码public double Power(double base, int exponent){ double result=1; if(exponent&gt;0){ for(int i=1;i&l...

2019-03-14 20:51:24 83

原创 剑指offer 面试题15 二进制中1的个数

二进制中1的个数题目请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1,该函数输出2思路设置一个flag,将flag 1 左移。方法2把一个整数减1,在和原数相与,会把改整数二进制表示中的最右边的1变成0。代码public int numberOf1(int n){ int count=0; int flag=1; for...

2019-03-14 20:14:32 80

原创 剑指offer 面试题14 剪绳子

剪绳子题目给你一段长度为n的绳子,请把绳子剪成m段(m、n都是整数,n&gt;1并且m&gt;1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]k[1]…*k[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。思路第一种是动态规划自下而上代码public int maxProductAfterCu...

2019-03-13 17:45:01 148

原创 剑指offer 面试题13 机器人的运动范围

机器人的运动范围题目地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每次可以向左,向右,向上,向下移动一格,但不能进入行坐标和列坐标的位数之和大于k的格子。例如:当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18;但它不能进入方格(35,38),因为3 + 5+3+8 = 19.请问该机器人最多能到达多少个格子?思路机器人从坐标(0,0)开始...

2019-03-13 17:04:39 114

原创 剑指offer 面试题12 矩阵中的路径

矩阵中的路径题目请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串”bfce”的路径,但是矩阵中不包含”abcb”路径,因为字符串的第一个字...

2019-03-12 22:53:15 80

原创 剑指offer 面试题11 旋转数组的最小数字

旋转数组的最小数字题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为旋转。 输入一个递增的排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小元素为1.思路从头到尾遍历一次肯定可以。但这样复杂。我们可以使用二分法实现查找。分别比较数组中间的元素与第一个元素和最后一个元素的大小,如果中间元素大于第一个元素,则把...

2019-03-11 22:33:15 78

原创 剑指offer 面试题10 斐波那契数列

斐波那契数列题目写一个函数,输入n,求斐波那契数列的第n项。思路从下往上加代码public static int Fibonacci(int n){ int[] result={0,1}; if(n&lt;2){ return result[n]; } int fibone=1; int fibtwo=0; int fibn=0; for(int i=2;i&lt;=...

2019-03-10 20:49:51 62

原创 剑指offer 面试题9 用两个栈实现队列

用两个栈实现队列题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。思路主要思路就是全部进入stack1,在弹出的时候都pop出Stack2。然后再从stack2中pop出来。代码public class twostackstoqueue{ private static Stac...

2019-03-10 20:03:49 54

原创 剑指offer 面试题8 二叉树的下一个节点

二叉树的下一个节点题目给定一颗二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。思路如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点。也就是说,从右子节点出发一直沿着指向左子节点的指针,我们就能找到它的下一个节点。如果一个节点没有右子树,如果节点是它父节点的左子节点,那么它的下一个节点就...

2019-03-10 19:37:14 56

原创 剑指offer 面试题7 重建二叉树

重建二叉树题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出二叉树并输出他的根节点。二叉树的定义如下:public static class BinaryTreeNode{int value;BinaryTreeN...

2019-03-09 17:22:15 91

原创 剑指offer 面试题6 从尾到头打印链表

从尾到头打印链表题目输入一个链表的头结点,从尾到头反过来打印出每个节点的值。思路我们将链表从头到尾压入栈中,然后再将栈中的元素pop出来。代码public static void printList(ListNode node){ Stack&lt;Integer&gt; stack=new Stack&lt;Integer&gt;(); while(n...

2019-03-09 15:30:38 53

原创 剑指offer 面试题5 替换空格

替换空格题目请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。代码public String replaceSpace(String sentence){ char[] chars=sentence.toCharArray(); String replace= ""; for...

2019-03-07 17:23:27 58

原创 剑指offer 面试题4 二维数组中的查找

二维数组中的查找题目在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路首先选取数组右上角的数字。如果该数字等于要查找的这个数字,则结束查找过程;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,则剔除这个数字所在的行。直到找到要查找的数字,或...

2019-03-07 16:14:50 56

原创 剑指offer 面试题三 题目二

不修改数组找出重复的数字题目在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字2或者3。思路我们新建一个数组,将数组中的每一个数字m,放到新数组下标为m的位置,如果有重复,说明有重复的数字m。...

2019-03-07 11:52:08 184

原创 剑指offer 面试题3 数组中重复的数字

数组中重复的数字题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。思路将数组的第i个数字本身的值m与i进行比较,如果相等,则不变,如果不等,将数组下标为m的数字...

2019-03-07 11:28:54 101

原创 实现singleton模式

剑指offer 面试题2 实现singleton模式实现singleton模式题目:设计一个类,我们只能生成该类的一个实例java示例class A{ public static A a= new A(); private A(){} public static A getInstance(){ return a; }}...

2019-03-07 11:14:14 177

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除