面试题
风絮_
愿你在山顶时有清风拂面,愿你在谷底时依然不孤不寒。
展开
-
《剑指offer》面试题5:从尾到头打印链表(java实现)
题目:输入一个链表的头结点,从尾到头反过来打印每个结点的值。——来源于《剑指offer》有两种思路,一种是借助数据结构——栈,先进后出的特点,另一种是递归代码实现package com.qianyu.jianzhioffer;import java.util.*;/** * @author lijing * @date 2019-07-18-11:38 * @disc...原创 2019-07-18 12:58:50 · 170 阅读 · 0 评论 -
《剑指offer》面试题22:栈的压入、弹出序列(java实现)
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)——来源于《剑指offer》解题思路:借助一个辅助栈,如果下一个弹出的数字刚好是栈...原创 2019-07-31 16:21:04 · 143 阅读 · 0 评论 -
《剑指offer》面试题11:数值的整数次方(java实现)
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。——来源于《剑指offer》需要注意的地方:指数exponent小于零和指数为负数的情况底数base是零的情况零的零次方是无意义的,无论输出0还是1都是可以接受的判断底数是否为零时不能直接写base==0,因为在计算机内小数都有误差(float和double),判断两...原创 2019-07-27 12:49:24 · 149 阅读 · 0 评论 -
《剑指offer》面试题14:调整数组顺序(java实现)
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。——来源于《剑指offer》解题思路:使用两个指针p1和p2分别指向数组的首元素和尾元素,然后p1依次向后移动,p2依次向前移动。直到p1指向第一个偶数,p2指向第一个奇数的时候,p1和p2位置的元素进行交换。代码实现:import java.util.*;p...原创 2019-07-27 14:16:59 · 386 阅读 · 0 评论 -
《剑指offer》面试题13:在O(1)时间删除链表结点(java实现)
题目:给定单向链表的头指针和一个结点指针,定义一个函数在 O(1)时间删除该结点。——来源于《剑指offer》思路:找到要删除结点的下一个结点,将下一个结点的值赋值给要删除的结点,然后删除下一个结点。代码实现:package com.qianyu.jianzhioffer.deleteLinkListNode;/** * @author lijing * @date 201...原创 2019-07-27 16:09:07 · 179 阅读 · 0 评论 -
《剑指offer》面试题29:数组中出现次数超过一半的数字(java实现)
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。——来源于《剑指offer》解法一:/** * @author lijing * @date 2019-08-05 11:00 * @description 找出数...原创 2019-08-05 14:04:16 · 188 阅读 · 5 评论 -
《剑指offer》面试题24:二叉搜索树的后序遍历序列(java实现)
题目:题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。解题思路:因为二叉搜索树的后续遍历序列中最后一个元素是二叉树的根节点,可以先找出二叉树的根结点,然后从前往后遍历序列直到找到第一个大于根结点的元素,这时这个元素之前的序列为二叉树的左子树,包括这个节点在内的右侧序列为二叉树的右子树...原创 2019-08-01 17:06:19 · 128 阅读 · 0 评论 -
《剑指offer》面试题25:二叉树中和为某一值的路径(java实现)
题目:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)——来源于《剑指offer》解题思路:要求路径,首先想到遍历因为首先要访问根结点,所以选用前序遍历由于遍历过程中无法找到结点的前一个结点,所以想到用一种数据结构来保存路径序...原创 2019-08-01 18:45:00 · 258 阅读 · 0 评论 -
《剑指offer》面试题15:链表中倒数第k个结点(java实现)
题目:输入一个链表,输出该链表中倒数第 k 个结点。为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。——来源于《剑指offer》思路:使用两个指针,left和right都从链表的开头开始移动,right指针先移动到k-1的位置,然后left再和...原创 2019-07-28 16:13:42 · 157 阅读 · 0 评论 -
《剑指offer》面试题16:反转链表(java实现)
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。——来源于《剑指offer》循环实现:用三个指针分别指向当前结点,当前结点的前一个结点,当前结点的后一个结点package com.qianyu.jianzhioffer.reverseLinklist;/** * @author lijing * @date 2019-07-28-16:16 *...原创 2019-07-28 17:22:34 · 156 阅读 · 0 评论 -
《剑指offer》面试题26:复杂链表的复制(java实现)
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空——来源于《剑指offer》利用哈希表import java.util.*;/** * @author lijing * @date 2019-08-02 10...原创 2019-08-02 12:18:03 · 164 阅读 · 0 评论 -
《剑指offer》面试题31:连续子数组的最大和(java实现)
题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。——来源于《剑指offer》需要注意:连续数组旨在强调数字是有序的,子数组的在父数组中的索引值应该是连续的注意max和sum的初始值不能为0,因为如果是0的话如果该数组的元素都为负数,此时输出的最大值是0,不符合题意。代码实现:...原创 2019-09-11 16:45:11 · 172 阅读 · 0 评论 -
《剑指offer》面试题30:最小的k个数(java实现)
题目:输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。来源于——《剑指offer》思路1:利用快速排序的patition函数, 先随机找到一个中间数字,返回索引值,通过比较索引值和k的大小来判断是否再次调用patition函数,知道k和返回的索引相同。缺点:修改了原来的数组public class Soluti...原创 2019-09-11 17:00:00 · 170 阅读 · 0 评论 -
《剑指offer》面试题32:求1到n整数中1出现的次数(java实现)
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。——来源于《剑指offer》代码实现public class Solution { public int NumberOf1Between1AndN_Solution(int n) { if (n &l...原创 2019-09-12 20:20:24 · 242 阅读 · 0 评论 -
《剑指offer》面试题33:把数组排成最小的数(java实现)
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3, 32, 321},则打印出这3个数字能排成的最小数字321323。代码实现import java.util.*;public class Solution { public String PrintMinNumber(int [] numbers) { ...原创 2019-09-13 16:22:10 · 182 阅读 · 0 评论 -
《剑指offer》面试题5:丑数(java实现)
题目:题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。——来源于《剑指offer》代码实现:import java.util.*;/** * @author lijing * @date 2019-09-27 20:31 * @des...原创 2019-09-28 18:39:18 · 108 阅读 · 0 评论 -
《剑指offer》面试题23:从上往下打印二叉树(java实现)
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。——来源于《剑指offer》思路:借助队列这种数据结构先进先出的特性,先将根结点的左右孩子压入队列,然后依次将子树的左右孩子压入队列。代码实现:import java.util.*;/**public class TreeNode { int val = 0; TreeNode left = null;...原创 2019-07-31 15:29:57 · 135 阅读 · 0 评论 -
《剑指offer》面试题28:字符串的排列(java实现)
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。——来源于《剑指offer》感谢这篇文章的作者:字符串全排列算法学习解题思路:我们可以先考虑特例,即字符串中没有重复字符的时候该怎么办。没有重复字符的时候我们可以,固定第一位,使第一位依次与后面的各位...原创 2019-08-04 13:44:29 · 507 阅读 · 0 评论 -
《剑指offer》面试题3:二维数组的查找(java实现)
《剑指offer》面试题3:二维数组的查找(java实现)题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。——来源于《剑指offer》解题思路选取左下角或者右上角的元素与输入的整数进行比较,如果相等就返回,否则就剔除相应的行或者列再重复上面操作。利用递归实现:...原创 2019-07-16 18:30:28 · 137 阅读 · 0 评论 -
《剑指offer》面试题17:合并两个排序链表(java实现)
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。——来源于《剑指offer》循环实现package com.qianyu.jianzhioffer.connectTwoLinklists;/** * @author lijing * @date 2019-07-29-10:04 * @discription 合并两个有序链表 */p...原创 2019-07-29 10:47:43 · 199 阅读 · 0 评论 -
《剑指offer》面试题6:重建二叉树(java实现)
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出图2.6所示的二叉树并输出它的头结点。——来源于《剑指offer》利用递归思想,根据前序遍历第一个数,即二叉树的头结点,将中序遍历序列划分为左子树序列和右子树序...原创 2019-07-19 17:03:22 · 142 阅读 · 0 评论 -
《剑指offer》面试题18:树的子结构(java实现)
题目:输入两棵二叉树A和B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)——来源于《剑指offer》思路:先依次比较A和B的根结点,如果相等就递归比较左子树和右子树,如果不相等就继续比较下一个结点代码实现:/**public class TreeNode { int val = 0; TreeNode left = null; Tr...原创 2019-07-29 13:03:53 · 180 阅读 · 0 评论 -
《剑指offer》面试题4:替换空格(java实现)
题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。——来源于《剑指offer》代码实现import java.util.*;class ReplaceBlank { public static char[] solution(char[] chs) { if (c...原创 2019-07-17 14:44:47 · 109 阅读 · 0 评论 -
《剑指offer》面试题7:用两个栈实现队列(java实现)
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数push和pop,分别完成在队列尾部插入结点和在队列头部删除结点的功能。————来源于《剑指offer》思路:在push元素的时候往一个栈里面放元素,在pop元素的时候将元素放在另一个栈里,从另一个栈里面pop元素代码实现:package com.qianyu.jianzhioffer.twoStack;/** *...原创 2019-07-20 19:16:42 · 167 阅读 · 0 评论 -
《剑指offer》面试题19:二叉树的镜像(java实现)
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像——来源于《剑指offer》思路:递归交换左右子树代码实现/** * @author lijing * @date 2019-07-30 9:26 * @description 二叉树镜像 */public class Solution { public class TreeNode { ...原创 2019-07-30 10:16:21 · 125 阅读 · 0 评论 -
《剑指offer》面试题20:顺时针打印矩阵(java实现)
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。——来源于《剑指offer》代码实现import java.util.ArrayList;public class Solution { public ArrayList<Integer> printMatrix(int[][] matrix) { if (matrix == n...原创 2019-07-30 11:28:20 · 125 阅读 · 0 评论 -
《剑指offer》面试题10:二进制中1的个数(java实现)
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。——来源于《剑指offer》注意:判断该整数最右边是否为1的方法为:和1做位与运算右移一位虽然和数学上的除以2是等价的,但是除法效率比移位运算要低得多,在实际编程中应尽可能的用移位运算代替乘除法思路1:用1和该整数二进制的最后一位做与运算,结果是1的话就计数加一,然后将该整数右移一位,再进行循环,但是这种方...原创 2019-07-25 12:46:06 · 204 阅读 · 0 评论 -
《剑指offer》:公司员工年龄排序问题(java实现)
实现一个排序算法,要求时间效率为O(n)——来源于《剑指offer》要求:样本为公司几万名员工(数字的大小是在一个较小的范围之内)只允许使用常量大小辅助空间,不得超过O(n)代码实现:package com.qianyu.jianzhioffer.sort;/** * @author lijing * @date 2019-07-21-10:47 * @discrop...原创 2019-07-21 11:21:36 · 305 阅读 · 0 评论 -
《剑指offer》面试题8:旋转数组的最小数字(java实现)
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。——来源于《剑指offer》简要思路:利用二分查找的思想,用首尾元素同中间元素比较。代码实现import java.util.ArrayList;public...原创 2019-07-21 14:28:47 · 250 阅读 · 1 评论 -
《剑指offer》面试题9:斐波那契数列(java实现)
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39——来源《剑指offer》代码实现package com.qianyu.jianzhioffer.Fibonacci;/** * @author lijing * @date 2019-07-22-10:43 * @discroption 用递归和循环...原创 2019-07-22 11:05:32 · 208 阅读 · 0 评论 -
《剑指offer》面试题27:二叉搜索树与双向链表(java实现)
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。——来源于《剑指offer》思路:由于转换为双向链表之后的链表是排过序的,所以需要对二叉树进行中序遍历根结点的左孩子要指向左子树的最大值,右孩子要指向有子树的最小值注意:代码中的pLastNodeList不能设置为函数中的局部变量然后每次作为参数传递进去,原因可...原创 2019-08-03 15:22:53 · 208 阅读 · 0 评论 -
《剑指offer》面试题:青蛙跳台阶问题(java实现)
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。——来源于《剑指offer》思路:简化问题可以从一级台阶开始分析,一级台阶只有一种跳法。如果有二级台阶的话,有两种跳法。以此类推,当台阶数量为n的时候(即f(n)),可以分两种情况:1.第一次跳一级台阶(f(n-1)) 2. 第一次跳两级台阶(f(n-2))。所以f(n...原创 2019-07-22 11:44:43 · 536 阅读 · 1 评论 -
《剑指offer》面试题21:包含min函数的栈(java实现)
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。——来源于《剑指offer》刚看到这个题想的是用一个全局变量来保存最小值min,每次push的时候判断一下,如果比最小值小,就将最小值替换为更小的那个数。但是这个思路有很大的问题,就是当我们pop一个元素的时候无法知道上一个最小的数是多少,无法更新最小数。class MySta...原创 2019-07-31 14:59:14 · 150 阅读 · 0 评论 -
《剑指offer》面试题35:第一个只出现一次的字符(java实现)
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).——来源于《剑指offer》解题思路:先遍历字符串,用一个哈希表将所有字符作为键,字符出现的次数作为值存入。然后再次遍历字符串,找到第一个值为1的字符的位置。代码实现:public class Solution { ...原创 2019-10-09 15:00:11 · 136 阅读 · 0 评论