自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指offer Java版

面试题3:数组中重复的数字面试题4:二位数组中的查找面试题5:替换空格面试题6:从头到尾打印链表面试题7:重建二叉树面试题8:二叉树的下一个节点面试题9:用两个栈实现队列面试题10:斐波那契数列面试题11:旋转数组的最小数字面试题12:矩阵中的路径面试题13:机器人的运动范围面试题15:二进制中1的个数面试题16:数值的整数次方面试题18-题目二...

2018-08-22 17:01:39 314

原创 面试题45:把数组排成最小的数

/* * 面试题45:把数组排成最小的数 * 题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 * 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323 * 思路:利用了lambda表达式 */ import java.util.Arrays; public class No45P...

2018-08-25 13:22:25 147

原创 面试题43:从1到n整数中1出现的次数:O(logn)算法

/* * 面试题43:从1到n整数中1出现的次数:O(logn)算法 * 题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数? * 为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。 * ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到...

2018-08-25 13:20:28 427

原创 面试题42:连续子数组的最大和

/* * 面试题42:连续子数组的最大和 * 题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 * 求所有子数组的和的最大值。要求时间复杂度为O(n)。 * 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 * 思路:...

2018-08-25 13:19:00 118

原创 面试题41:数据流中的中位数

/* * 面试题41:数据流中的中位数 * 题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。 * 如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 * 我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 * 思路:创建优先级队列维护大顶...

2018-08-25 13:17:47 99

原创 面试题40:最小的k个数

/* * 面试题40:最小的k个数 * 题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 * 思路:冒泡排序 */ import java.util.ArrayList; public class No40GetLeastNumbers_Solution {     publi...

2018-08-25 13:16:29 157

原创 面试题39:数组中出现次数超过一半的数字

/* * 面试题39:数组中出现次数超过一半的数字 *题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。 * 由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 * 思路:可以考虑在遍历数组的时候保存两个值:一个是数组中的一个数字;另一个是次数。 * 当我们遍历...

2018-08-25 13:15:18 97

原创 面试题38:字符串的排列

/* * 面试题38:字符串的排列 * 题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。 * 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的 * 所有字符串abc,acb,bac,bca,cab和cba。 * 思路:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。 * 我们以三个字符abc为例来分析一下...

2018-08-25 13:13:45 214

原创 面试题37:序列化二叉树

/* * 面试题37:序列化二叉树 * 题目:请实现两个函数,分别用来序列化和反序列化二叉树 * 思路:序列化:前序遍历二叉树存入字符串中;反序列化:根据前序遍历重建二叉树 * 根据前序遍历规则完成序列化与反序列化。 * 所谓序列化指的是遍历二叉树为字符串; * 所谓反序列化指的是依据字符串重新构造成二叉树。    * 依据前序遍历序列来序列化二叉树,因为前序遍历序列...

2018-08-25 13:10:10 116

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

/* * 面试题36:二叉搜索树与双向链表 * 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 * 思路:1、将左子树构成双链表,并返回该链表的头节点(左子树最左边的节点) * 2、定位到左链表的最后一个节点(左子树最右边的节点) * 3、如果左子树链表不为空,则将当前root追加到左子树链表后 *...

2018-08-25 13:08:06 93

原创 面试题35:复杂链表的复制

/* * 面试题35:复杂链表的复制 * 题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点), * 返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) * 思路:在不用辅助空间的情况下,实现O(n)的时间效率。 */class RandomListNode...

2018-08-25 13:01:13 142

原创 面试题34:二叉树中,和为某一值的路径

/* * 面试题34:二叉树中,和为某一值的路径 * 题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 * 思路:由于路径是从根节点出发到叶节点,在三种遍历中,只有前序遍历是首先访问根节点的。 */ import java.util.ArrayList; class ...

2018-08-24 08:36:11 113

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

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

2018-08-24 08:34:53 164

原创 面试题32:从上到下打印二叉树

/* * 面试题32:从上到下打印二叉树 * 题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 * 解题思路:Deque是Queue的子接口,我们知道Queue是一种队列形式,而Deque则是双向队列,它支持从两个端点方向检索和插入元素 * 当队列不空的时候,重复以下操作。 * 1、弹出一个元素。作为当前的根节点。 * 2、如果根节点有左孩子,访问左孩子,并将...

2018-08-24 08:33:33 147

原创 面试题30:包含min函数的栈

/* * 面试题30:包含min函数的栈 * 题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数 * 解题思路:定义两个栈,一个存放入的值。另一个存最小值。 */ import java.util.Stack; public class No30MinStack {     public static void main(...

2018-08-24 08:32:19 110

原创 面试题29:顺时针打印矩阵

import java.util.ArrayList;/** 面试题29:顺时针打印矩阵 * 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 *    15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.  */...

2018-08-24 08:29:58 204

原创 面试题28:对称的二叉树

/* * 面试题28:对称的二叉树 * 题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 * 思路:利用递归进行判断,若左子树的左孩子等于右子树的右孩子且左子树的右孩子等于右子树的左孩子,并且左右子树节点的值相等,则是对称的。 */public class No28isSymmetrical {   ...

2018-08-24 08:28:35 123

原创 面试题27:二叉树的镜像

/* * 面试题27:二叉树的镜像 * 题目:操作给定的二叉树,将其变换为源二叉树的镜像。 * 思路:1、找到不为空的节点。2、然后交换左右节点。3、递归调用此函数 */class TreeNode3 {    int val = 0;    TreeNode3 left = null;    TreeNode3 right = null;    public...

2018-08-24 08:27:08 111

原创 面试题26:树的子结构

/* * 面试题26:树的子结构 * 题目:输入两棵二叉树A,B,判断B是不是A的子结构 * 思路:要查找树A中是否存在和树B结构一样的子树,我们可以分为两步: * 第一步在树A中找到和树B的根结点的值一样的结点R,第二步再判断树A中以R为根结点的子树是不是包含和B一样的结构。 * 通常我们都会采用递归的方式,但是这里需要注意的检查边界条件,即空指针。 */class...

2018-08-24 08:25:38 83

原创 面试题25:合并两个排序的链表

/* * 面试题25:合并两个排序的链表 * 【考点:递归和循环】合并两个排序的链表 * 题目描述:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 * 解题思路:本题可以用递归进行求解 */ class ListNode4 {    int val;    ListNode4 next = null;   ...

2018-08-24 08:23:41 87

原创 面试题24:反转链表

/* 面试题24:反转链表 * 输出反转后链表的头节点,定义三个指针反向输出。 */ class ListNode2 {    int val;    ListNode2 next = null;    ListNode2(int val) {       this.val = val;    }}public class No24ReverseLis...

2018-08-24 08:22:25 203

原创 面试题23:链表中环的入口节点

/* * 面试题23:链表中环的入口节点 * 题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null * 思路:定义快慢两个指针,相遇后(环中相汇点)将快指针指向pHead 然后一起走,每次往后挪一位,相遇的节点即为所求。 * 详细分析:相遇即p1==p2时,p2所经过节点数为2x,p1所经过节点数为x,设环中有n个节点,p2比p1多走一圈有2x=n+x;...

2018-08-23 11:57:33 158

原创 面试题22:链表中的倒数第k个节点

/* * 面试题22:链表中的倒数第k个节点 * 题目:输入一个链表,输出该链表中倒数第k个节点。 * 为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第一个节点。 * 思路:为了实现只遍历链表一次就能找到倒数第k个节点,可以定义两个指针。 * 第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动; * 从第k步开始。第二个指针也开始从链表的头指...

2018-08-23 11:55:57 89

原创 面试题21:调整数组顺序,使奇数位于偶数前面

/* * 面试题21:调整数组顺序,使奇数位于偶数前面 * 输入一个整数数组,实现一个函数来调整数组中数字的顺序,使得所有的奇数位于偶数的前半部分, * 所有偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 */public class No21ReorderArray {    public static void main(String[] a...

2018-08-23 11:54:35 109

原创 面试题20:表示数值的字符串

/* * 面试题20:表示数值的字符串 *题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 *  但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不

2018-08-23 11:53:09 126

原创 面试题19:正则表达式匹配

/* * 面试题19:正则表达式匹配 * 题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 *  在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 * 思路:当模式中的第二个字符...

2018-08-23 11:51:34 476

原创 面试题18-题目二:删除链表中重复的节点

/* * 面试题18-题目二:删除链表中重复的节点 * 题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 * 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 * 思路:先新建一个头节点,然后向后查找值相同的节点,重复查找后删除 */public...

2018-08-23 11:50:27 101

原创 面试题16:数值的整数次方

/* * 面试题16:数值的整数次方 * 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent的次方。 * 不得使用库函数,不需要考虑大数的问题。 */public class ExponentOfBase {     public static void main(String[] args) {       ...

2018-08-23 11:48:56 111

原创 面试题15:二进制中1的个数

/** * 面试题15:二进制中1的个数 * 输入一个整数,输出该数二进制表示中1的个数。 * 思路:n&(n-1) 的结果会将n最右边的1变成0,直到n=0 * 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0, * 原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响...

2018-08-23 11:47:33 106

原创 面试题13:机器人的运动范围

/* * 面试题13:机器人的运动范围 * 题目:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动, *    每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 *    例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。 *    但是,它不能进入方格(35,38),因为3+5+...

2018-08-23 11:45:58 165 1

原创 面试题12:矩阵中的路径

/* * 面试题12:矩阵中的路径 * 题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。 * 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。 * 如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 * 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含...

2018-08-23 11:43:28 154

原创 面试题11:旋转数组的最小数字

/*面试题11:旋转数组的最小数字 * 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0思路:利用二分法,找到中间的数,然后和最左边的值进行比较,若大于最左边的数...

2018-08-22 18:47:04 102

原创 面试题10:斐波那契数列

/**面试题10:斐波那契数列 * 题目一:求斐波那契数列数列的第n项 * 现在要求输入一个整数n,请你输出斐波那契数列的第n项 * 思路:递归的效率低,使用循环 * @author juaner * */public class Fibonacci1 {     public static void main(String[] args) {      ...

2018-08-22 18:45:04 249

原创 面试题9:用两个栈实现队列

import java.util.Stack;/** * 面试题9:用两个栈实现队列 * 用两个栈来实现一个队列,完成队列的Push,peek和Pop操作。 队列中的元素为int类型。思路:一个栈压入元素,而另一个栈作为缓冲,将栈1的元素出栈后压入栈2中。也可以将栈1中的最后一个元素直接出栈,而不用压入栈2中再出栈。 * @author juaner * */pu...

2018-08-22 17:26:31 95

原创 面试题8:二叉树的下一个节点

/* * 面试题8:二叉树的下一个节点 * 题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 * 思路:如果有右子树,下一节点就是右子树的最左节点。    *    如果没有右子树,如果它是父节点的左子树,下一节点就是父节点。                               ...

2018-08-22 17:23:14 97

原创 面试题7:重建二叉树

/* * 面试题7:重建二叉树 * 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。        思路:先找出根节点,然后利用递归方法构造二叉树 */ class TreeNode {...

2018-08-22 17:20:01 101

原创 面试题6:从头到尾打印链表

/* * 面试题6:从头到尾打印链表 */ import java.util.ArrayList;import java.util.Stack; class ListNode {    int val;    ListNode next = null;     ListNode(int val) {       this.val = val; ...

2018-08-22 17:17:16 108

原创 面试题5:替换空格

import java.util.Scanner;/** * 面试题5:替换空格 * 将一个字符串中的空格替换成“%20”。 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。    思路:从后往前复制,数组长度会增加,或使用StringBuilder、StringBuffer类 * @author juaner * ...

2018-08-22 17:14:10 71

原创 面试题4:二位数组中的查找

/** * 面试题4:二位数组中的查找 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。   思路:从右上角或左下角开始找,逐行删除,或者用二分法查找 * @author juaner */public class FindNum {     ...

2018-08-22 17:11:33 198

原创 面试题3:数组中重复的数字

/* * 面试题3:数组中重复的数字 * 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 *  数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。 *  请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 */public class No3dupl...

2018-08-22 17:05:27 116

空空如也

空空如也

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

TA关注的人

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