![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程之路
蜗牛w_w
我要一步一步往上爬 _ _ - - ~ ~
展开
-
面试题2:实现Singleton模式
题目:设计一个类,我们只能生成该类的一个实例思路:1)不能开发类的构造方法,不然谁都可以通过构造方法搭建,所以将构造方法私有化;2)创建一个静态实例,根据需要创建一个实例,但也要将该实例私有化,防止外部获取该实例时实例还未创建;3)创建一个方法获取2中的静态实例。解法一:(只适合单线程)public class Singleton { private Singleton...原创 2018-10-03 10:25:26 · 113 阅读 · 0 评论 -
面试题14:剪绳子
题目:给你一根长度为n的绳子,把绳子剪成m段(m、n都为整数,n>1,m>1)每段绳子长度为m1,m2,m3,...,mn,求m1*m2*m3*...*mn的最大乘积是多少?例如,绳子长度8,把绳子剪成2,3,3,此时乘积最大为18.思路一:动态规划,从小往大,从长度为1的绳子开始算最大乘积是多少,假如绳子为1时为f(1)=1,绳子为2时为f(2)=1,绳子为3时为f(3)=2,那...原创 2018-10-04 19:47:11 · 111 阅读 · 0 评论 -
面试题13:机器人的运动范围
题目:地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始,每次可以向上下左右移动一格,但不能进入坐标的数位之和大于k的格子。例如,k=18,机器人可以进入格子(35,37),因为3+5+3+7=18,不能进入(35,38)的格子,因为3+5+3+8=19。请问机器人可以到达多少个格子?思路:回溯法解法:package question13;public class T...原创 2018-10-04 17:05:23 · 136 阅读 · 0 评论 -
面试题12:矩阵中的路径
题目:请设计一个函数,用来判断矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以上下左右移动一格,但不允许经过已经经过的格子。例如,在下面的3*4矩阵中含有“bfce”的路径,但不包含“abfb”的路径,矩阵如下:a b t gc f c sj d e h思路:采用回溯法,遍历所有格子,例如从...原创 2018-10-04 16:45:42 · 102 阅读 · 0 评论 -
面试题11:旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的一个最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。思路:由于该数组是排序数组的一个旋转,所以一般情况下,数组是由两个递增子数组组合的,本题就是由{3,4,5}和{1,2}组成,所以我们可以每次取其中间的元素,判断该元素是否大...原创 2018-10-03 21:14:44 · 124 阅读 · 0 评论 -
面试题10:斐波那契数列
题目一:求斐波那契数列的第n项。写一个函数,输入n,求斐波那契数列的第n项,斐波那契数列的定义如下:n=0,f(n)=0;n=1,f(n)=1;n>1,f(n)=f(n-1)+f(n-2).思路一:递归解决一:public class Test1 { public static void main(String[] args) { int num=findNum(3)...原创 2018-10-03 20:36:52 · 105 阅读 · 0 评论 -
面试题9:用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。思路:队列是先进先出的,栈是先进后出的,用stack1来存放每次新增的元素,删除元素就在stack2删除,不过每次删除前要判断stack2中是否没有元素,有元素就删除栈顶的,没有元素就将stack1的元素移动到stack2中。例如,st...原创 2018-10-03 20:15:00 · 91 阅读 · 0 评论 -
面试题8:二叉树的下一个节点
题目:给定一个二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。图一思路:以图一为例分析,图一二叉树的中序序列为{d,b,h,e,i,a,f,c,g},分几种情况:1)一个节点有右子树,那么该节点的下一个节点就是右子树的最左子节点2)一个节点没有右子树,如果该节点是其父节点的左子节点,那么它的下一个...原创 2018-10-03 17:58:43 · 90 阅读 · 0 评论 -
面试题7:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建图一所示的二叉树并输出它的头节点。二叉树节点定义如下:class BinaryTreeNode{ int value; BinaryTreeNode left...原创 2018-10-03 17:11:10 · 129 阅读 · 0 评论 -
面试题6:从尾到头打印链表
题目:输入一个链表的头节点,从尾到头反过来打印出每个节点的值,链表节点定义如下:class Node{ int value; Node next; public Node(int value,Node node) { this.value=value; this.next=node; } }思路一:利用栈先进后出的结构,将节点从头到尾存储入栈,再一个一个取出...原创 2018-10-03 15:57:39 · 75 阅读 · 0 评论 -
面试题5:替换空格
题目:请实现一个函数,把字符串中的每一个空格替换成"%20"。例如,输入"We are happy.",则输出"We%20are%20happy."。思路:如果从前往后替换,那后面的内容会被替换多次,时间复杂度为O(n^2)。从后往前替换,则每一个字符只要被替换1次,时间复杂度为O(1),先算出字符串中有多少空格,假如为n,从后往前遍历,当遍历的元素不是空格时,将内容往后移动n位,若遍历到一个...原创 2018-10-03 15:33:15 · 73 阅读 · 0 评论 -
面试题4:二位数组中的查找
题目:在一个二位数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。例如:在一下数组中寻找数字71 2 8 92 4 9 124 7 10 136 8 11 15思路:由于数组是从左到右,从上...原创 2018-10-03 14:57:47 · 109 阅读 · 0 评论 -
面试题3:数组中重复的数字
题目一:在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3.思路一:利用hash表,新建一个相同长度的数组,遍历原数组,每遍历一个元素,判断新数组中对应的下标(例如元素为2,对应下标就为...原创 2018-10-03 11:03:29 · 141 阅读 · 0 评论 -
面试题15:二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如,把9表示二进制是1001,有2位是1.因此,如果输入9,则该函数输出2.思路:定理:一个数n和n-1相与相当于将n的二进制表示的最右边的1变为0。为什么呢?因为n-1的二进制就是n的二进制的最右边的1变为0,最右边1后面的位都变为0,例如:n=11010000,n-1=11001111.所以,该题目可以利用该定理来做。...原创 2018-10-04 20:02:09 · 122 阅读 · 0 评论