自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

浊酒入清梦的博客

雨夜听落叶,浊酒入清梦。

  • 博客(50)
  • 资源 (1)
  • 收藏
  • 关注

原创 剑指Offer-题57(二)(Java版):和为s的连续正数序列

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:和为s的连续正数序列 输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。主要思路:使用两个数min和max来表示连续序列的最小值和最大值,初始化min为1,max为2。若序列和小于s,为了使序列包含更...

2018-05-30 18:38:02 214

原创 剑指Offer-题57(一)(Java版):和为s的两个数字

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:和为s的两个数字 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。主要思路:由于数组递增,则可以选择从最小值和最大值开始寻找,左边指针指向最小值,右边指针指向最大值,若两个数的和小于s,则增大较小的值(即左边指针向中间移动);若两个数的和大于s,则减小较大...

2018-05-30 18:15:52 272

原创 剑指Offer-题56(二)(Java版):数组中唯一的只出现一次的数字

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:数组中唯一的只出现一次的数字 在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。主要思路:基于位运算,若一个数字出现三次,那么它的二进制表示中的每一位也出现三次。把数组中的所有出现三次的数字的二进制表示的每一位分别加起来,则每一位的和都能被3整除,再把所求的那个数字的每一位分别加上去,若二...

2018-05-29 20:28:38 724

原创 剑指Offer-题56(一)(Java版):数组中只出现一次的两个数字

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:数组中只出现一次的两个数字 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。主要思路:根据异或运算的性质:数字异或它自身等于0。若数组中只有一个数字出现一次 ,其他数字都出现2次,那么从头到尾异或数组每个的数字,则最后结果就是只出现一次的...

2018-05-29 19:51:00 688

原创 剑指Offer-题55(二)(Java版):平衡二叉树

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:平衡二叉树 输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。主要思路:使用递归,分别计算当前节点的左右子树的深度,若左右子树内部已平衡,且它们两者的深度之差不大于1,则说明当前节点所代表的子树也是平衡二叉树,同时返回当前节点的深度(左右子树深度最大值...

2018-05-23 20:01:00 273

原创 剑指Offer-题55(一)(Java版):二叉树的深度

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:二叉树的深度 输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。主要思路:使用递归,分别计算当前节点的左右子树的深度,取两者最大值,再加1。或者借助队列,使用层序遍历,每遍历一层,深度加1.关键点:递归,层序遍历时间复杂度:O(n)publ...

2018-05-23 19:44:57 203

原创 剑指Offer-题54(Java版):二叉搜索树的第k个结点

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:二叉搜索树的第k个结点 给定一棵二叉搜索树,按节点值从小到大排列,找出其中的第k(k≥1)个结点。主要思路:使用中序遍历,每遍历一个节点,记录一个计数值,当计数值等于k时,当前遍历到的节点就是所求节点。关键点:中序遍历时间复杂度:O(n)public class KthNodeOfTree{ private...

2018-05-22 19:33:42 283

原创 剑指Offer-题53(三)(Java版):数组中数值和下标相等的元素

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:数组中数值和下标相等的元素 假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组{-3, -1, 1, 3, 5}中,数字3和它的下标相等。主要思路:数组是递增有序的,使用二分查找。先获取数组的中间数,若中间数的值和下标相等,则找到一个满足条件的数;若中间...

2018-05-22 19:04:16 600

原创 剑指Offer-题53(二)(Java版):0到n-1中缺失的数字

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:0到n-1中缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。主要思路:若数组没有缺失,则每个数字和它的下标都相等。然而,现在数组有缺失,说明从缺失的那个数开始,后面的数字都比它的下标大1。因此找出第一个...

2018-05-21 21:28:55 783

原创 剑指Offer-题53(一)(Java版):数字在排序数组中出现的次数

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, 3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。主要思路:排序数组使用二分查找,先找出该数字第一次出现的位置和最后一次出现的位置,则出现次数也就是它们的长度。   找数字第一次出现的位置的过程:若...

2018-05-21 20:52:00 168

原创 剑指Offer-题52(Java版):两个链表的第一个公共结点

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:两个链表的第一个公共结点 输入两个单向链表,找出它们的第一个公共结点。主要思路:为了同时到达第一个公共结点,先分别计算两个链表的长度;然后,让较长的链表先走两者长度之差的步数;最后,每走一步,都比较它们的节点是否相同,第一个相同的结点就是所求的结点。由于是单向链表,所以从第一个公共结点开始,两个链表的结点都是重合的。因此,它们的...

2018-05-20 19:50:37 177

原创 剑指Offer-题51(Java版):数组中的逆序对

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:数组中的逆序对 在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。主要思路:   类似于归并排序。先把数组等分成子数组,统计出子数组的逆序对数目,在统计子数组的过程中,同时对子数组进行从小到大排序。然后,递归统计前后相邻子数组之间的逆序对数目。   统计...

2018-05-20 19:19:48 433

原创 剑指Offer-题50(二)(Java版):字符流中第一个只出现一次的字符

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:字符流中第一个只出现一次的字符 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是’g’。当从该字符流中读出前六个字符”google”时,第一个只出现一次的字符是’l’。主要思路:每从字符流中读入一个字符,若该字符没有重复,则记录该字符读入的位置;若该字符...

2018-05-19 21:20:40 508

原创 剑指Offer-题50(一)(Java版):字符串中第一个只出现一次的字符

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:字符串中第一个只出现一次的字符 在字符串中找出第一个只出现一次的字符。如输入”abaccdeff”,则输出’b’。主要思路:扫描字符串两次。第一次扫描,记录每个字符出现的次数。第二次扫描,获取每个字符的出现次数,则第一个出现次数为1的字符就是所求字符。可以使用哈希表或者数组来记录每个字符出现的次数。关键点:记录出现次数时...

2018-05-19 21:07:00 491

原创 剑指Offer-题49(Java版):丑数

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:丑数 把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。主要思路:需要保存和利用之前已经找到的丑数,并使这些丑数按从小到大排序。关键在于,找出三个已存在的丑数,分别乘以因子2,3,5,生成三个新丑数,...

2018-05-18 20:54:03 302

原创 剑指Offer-题48(Java版):最长不含重复字符的子字符串

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:最长不含重复字符的子字符串 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。例如,在字符串中”arabcacfr”,最长非重复子字符串为”acfr”,长度为4。主要思路:使用动态规划,记录当前字符之前的最长非重复子字符串长度f(i-1),其中i为当前字符的位...

2018-05-18 20:27:43 6721 3

原创 剑指Offer-题47(Java版):礼物的最大价值

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:礼物的最大价值 在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?主要思路:使用动态规划,f(i,j)表示到达坐标[i,j]时能拿到的最大礼物总和。则...

2018-05-17 19:17:38 1396

原创 剑指Offer-题46(Java版):把数字翻译成字符串

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:把数字翻译成字符串 给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成”a”,1翻译成”b”,……,11翻译成”l”,……,25翻译成”z”。一个数字可能有多个翻译。例如12258有5种不同的翻译,它们分别是”bccfi”、”bwfi”、”bczi”、”mcfi”和”mzi”。请编程实现一个函数用来计算一个数字有多少种不同的翻...

2018-05-17 18:35:04 1212

原创 剑指Offer-题45(Java版):把数组排成最小的数

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:把数组排成最小的数 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3, 32, 321},则打印出这3个数字能排成的最小数字321323。主要思路:找出排序规则,使得数组按此规则排序,从而能排序成一个最小的数字。因此,定义比较规则:两个数字n和m可拼接的字符串为nm和m...

2018-05-16 19:25:53 135

原创 剑指Offer-题44(Java版):数字序列中某一位的数字

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:数字序列中某一位的数字 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。主要思路: 举例分析,比如找第1001位数字, 1)位数为1的数值有10个:0~9,数字为10×1=10,显然1...

2018-05-16 19:02:12 1569 2

原创 剑指Offer-题43(Java版):从1到n整数中1出现的次数

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:从1到n整数中1出现的次数 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。主要思路: 为了找规律,使用例子来分析: 取n=21345,为了递归,把数字分成两段:1~1345和1346~21345 1.先分析1346~...

2018-05-15 19:33:36 216

原创 剑指Offer-题42(Java版):连续子数组的最大和

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:连续子数组的最大和 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。主要思路:   f(i):表示以第i个数字结尾的子数组的最大和;   data[i]:第i个数字的值f(i)={data[i],data[i]+f(i−1),i=0或f...

2018-05-15 18:21:41 458

原创 剑指Offer-题41(Java版):数据流中的中位数

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:数据流中的中位数 获取数据流中的中位数。如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。主要思路:可以把输入数据平分成两部分,左边的数据都小于右边的数据,那么即使左右两边内部的数据没有排序,也可以根据左边最大的数和右边最小...

2018-05-14 19:02:34 192

原创 剑指Offer-题40(Java版):最小的k个数

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:最小的k个数 输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。主要思路:使用最大堆,保存目前已知的最小的k个数,堆顶是k个数中最大的元素。遍历数组,若堆中元素个数小于k,则直接添加到当前数字到堆中;若当前数字小于堆顶元素(即堆中最大元素),说明堆顶元素不可能...

2018-05-14 18:26:06 280

原创 剑指Offer-题39(Java版):数组中出现次数超过一半的数字

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。主要思路:数字出现的次数超过数组长度的一半,说明它出现的次数比其他所有数字出现的次数和还要多。...

2018-05-13 19:04:19 147 1

原创 剑指Offer-题38(Java版):字符串的排列

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。主要思路:把字符串看成两部分,第一部分是它的第一个字符,第二部分是后面的字符。第一步,求所有可能出现在第一个位置的字符,即把首字符逐个与后面的字符交换...

2018-05-13 18:06:16 229

原创 剑指Offer-题37(Java版):序列化与反序列化二叉树

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:序列化与反序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树。主要思路: 序列化:用前序遍历序列化二叉树,保存当前节点值到字符串中,并添加”,”用于分割字符串。若当前节点为空,则使用一个特殊符号(比如”%”)来代替空节点。反序列化:先分割字符串,保存节点值到数组中。按前序遍历特点,先获取根节点,再获取左子树,最后...

2018-05-12 21:53:09 234

原创 剑指Offer-题36(Java版):二叉搜索树与双向链表

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。主要思路:在二叉搜索树中,左子节点的值小于父节点的值,右子节点的值大于父节点的值。因此,将二叉搜索树转换成一个排序双向链表时,左子节点相当于双向链表中的前一个节点,右子节点相当于双向链表中的后一...

2018-05-12 21:30:13 230

原创 剑指Offer-题35(Java版):复杂链表的复制

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:复杂链表的复制 请实现复制一个复杂链表的函数。在复杂链表中,每个结点除了有一个next指针指向下一个结点外,还有一个额外指针random指向链表中的任意结点或者null。主要思路: 分三步: 第一步:复制每个旧节点,使得新节点A’在旧节点A后面(A ->A’ ->B)。 第二步:根据旧节点的额外节点,设置新节点...

2018-05-11 22:16:08 164

原创 剑指Offer-题34(Java版):二叉树中路径和为某一值

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:二叉树中路径和为某一值 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。主要思路:用前序遍历节点,若当前节点是叶子结点,且路径结点值的和等于所求值,则当前路径符合要求;若当前节点不是叶子结点,则继续遍历它的左右子节点。当前节点及其子节点遍历完后,要...

2018-05-11 21:32:55 109

原创 剑指Offer-题33(Java版):二叉搜索树的后序遍历序列

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。主要思路:后序遍历序列中最后一个数字即为根节点的值。序列前面数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们...

2018-05-10 20:59:06 156

原创 剑指Offer-题32(二)(Java版):分层从上往下打印二叉树

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:分层从上往下打印二叉树 从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。主要思路:相当于广度优先遍历二叉树。因此借助一个队列来实现,每次打印完父节点,都把它的左节点和右节点添加到队列。同时,使用一个变量来记录当前层中还未打印的节点数,另外一个变量用于记录下一层节点的数目。关键点:广度优先遍历,记录...

2018-05-10 20:32:21 284

原创 剑指Offer-题32(一)(Java版):不分行从上往下打印二叉树

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:不分行从上往下打印二叉树 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。主要思路:相当于广度优先遍历二叉树。因此借助一个队列来实现,每次打印完父节点,都把它的左节点和右节点添加到队列。关键点:广度优先遍历时间复杂度:O(n)public class PrintTreeTopToBottom{...

2018-05-09 19:37:51 141

原创 剑指Offer-题31(Java版):栈的压入与弹出序列

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:栈的压入与弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 例如:序列{1、2、3、4、5}是某栈的压栈序列,序列{4、5、3、2、1}是该压栈序列对应的一个弹出序列。但{4、3、5、1、2}就不可能是该压栈序列的弹出序列。主要思路:借助辅助栈,并且使...

2018-05-09 19:28:18 119

原创 剑指Offer-题30(Java版):包含min函数的栈

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。主要思路:使用两个栈,一个主栈,一个最小栈(记录当前最小值)。每次把元素压入主栈时,若该元素小于等于最小栈的栈顶元素,则同时把该元素压入最小栈。当把主栈元素弹出时,若该元素等...

2018-05-08 19:00:26 149

原创 剑指Offer-题29(Java版):顺时针打印矩阵

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。主要思路: 分4步: 第一步:从左到右打印一行; 第二步:从上到下打印一列; 第三步:从右到左打印一行; 第四步:从下到上打印一列; 其中,每一步根据起始和终止坐标打印。每一步的前提条件: 第一步:必需的; 第二步:至少两行,即终止...

2018-05-08 18:42:44 149

原创 剑指Offer-题28(Java版):对称的二叉树

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:对称的二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 例如: 对称二叉树:以根节点做一条垂线,左右子节点关于该垂线对称// 10// / \// 6 6// /\ ...

2018-05-07 18:46:26 286

原创 剑指Offer-题27(Java版):二叉树的镜像

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:二叉树的镜像 请完成一个函数,输入一个二叉树,该函数输出它的镜像(左右子节点交换)。 例如:// 10// / \// 6 14// /\ /\// 4 8 12 16镜像为:// ...

2018-05-07 18:22:11 138

原创 剑指Offer-题26(Java版):树的子结构

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。 例如: A:// 10// / \// 6 14// /\ /\// 4 8 12 16B:// 6/...

2018-05-06 18:54:52 141

原创 剑指Offer-题25(Java版):合并两个排序的链表

参考自:《剑指Offer——名企面试官精讲典型编程题》题目:合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。主要思路:比较两个链表的当前结点,找出值较小的结点,将该结点添加到新链表的尾部。该过程可通过递归实现,其中要注意链表为空的情况。关键点:递归时间复杂度:O(n),n为两个链表的长度之和public class Merge...

2018-05-06 18:29:50 156

es-demo-master.zip

https://github.com/Mengzuozhu/es-demo 源码

2021-11-04

空空如也

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

TA关注的人

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