剑指offer
HW_870754395
这个作者很懒,什么都没留下…
展开
-
《剑指offer》刷题——【面试中的各项能力】面试题59:队列的最大值(java实现)
《剑指offer》刷题——【面试中的各项能力】面试题59:队列的最大值(java实现)一、题目描述:二、题目分析:三、代码实现:一、题目描述:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑...原创 2019-07-27 00:03:01 · 281 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率】面试题43:1~n整数中1出现的次数(java实现)
《剑指offer》刷题——【时间效率】面试题43:1~n整数中1出现的次数(java实现)一、题目描述二、题目分析方法一:不考虑时间效率一、题目描述输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数,例如,输入12,1~12这些整数中包含1的数字有1,10,11,12,1一共出现5次二、题目分析方法一:不考虑时间效率累加1~n中每个整数1出现的次数(每次通过对10求余数判...原创 2019-07-11 09:40:49 · 306 阅读 · 0 评论 -
《剑指offer》刷题——【画图让抽象问题形象化】面试题29:顺时针打印矩阵(java实现)
《剑指offer》刷题——【画图让抽象问题形象化】面试题29:顺时针打印矩阵(java实现)一、题目描述二、题目分析三、代码实现一、题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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,...原创 2019-06-30 14:28:17 · 297 阅读 · 0 评论 -
《剑指offer》刷题——【画图让抽象问题形象化】面试题28:对称的二叉树(java实现)
《剑指offer》刷题——【画图让抽象问题形象化】面试题28:对称的二叉树(java实现)一、题目表述二、题目分析三、代码实现一、题目表述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。二、题目分析前序遍历:根左右前序对称遍历:根右左如果前序遍历与前序对称遍历序列一样,则二叉树是对称的易出错之处:二叉树的根节点为n...原创 2019-06-29 11:17:30 · 266 阅读 · 0 评论 -
《剑指offer》刷题——【画图让抽象问题形象化】面试题27:二叉树的镜像(java实现)
《剑指offer》刷题——【代码的鲁棒性】面试题27:二叉树的镜像(java实现)一、题目描述二、题目分析三、代码实现一、题目描述操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 ...原创 2019-06-29 10:28:54 · 269 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率】面试题40:最小的K个数(java实现)
《剑指offer》刷题——【时间效率】面试题40:最小的K个数(java实现)一、题目描述二、题目分析方法一:O(nlogn)方法二:基于Partition函数O(n)-允许修改输入的数组一、题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。二、题目分析方法一:O(nlogn)把输入的n个整数排序最前...原创 2019-07-04 14:54:11 · 342 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率】面试题39:数组中出现次数超过一半的数字(java实现)
《剑指offer》刷题——【时间效率】面试题39:数组中出现次数超过一半的数字(java实现)一、题目描述二、题目分析方法一:方法二:基于Partition函数的时间复杂度为O(n)方法三:根据数组的特点时间复杂度为O(n)一、题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,...原创 2019-07-04 14:30:49 · 247 阅读 · 0 评论 -
《剑指offer》刷题——【代码的鲁棒性】面试题26:树的子结构(java实现)
《剑指offer》刷题——【代码的鲁棒性】面试题26:树的子结构(java实现)一、题目描述二、题目分析1. 过程:2. 易出错之处:三、代码实现一、题目描述输入两棵二叉树A和B,判断B是不是A的子结构。二、题目分析1. 过程:第一步:在树A中找到和树B的根节点的值一样的节点R第二步:判断树A中以R为根节点的子树是不是包含和树B一样的结构(左子树、右子树)2. 易出错之处:...原创 2019-06-28 19:54:26 · 274 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率与空间效率的平衡】面试题50:第一个只出现一次的字符(java实现)
《剑指offer》刷题——【时间效率与空间效率的平衡】面试题50:第一个只出现一次的字符(java实现)一、题目描述二、题目分析方法一:遍历-O(n^2)方法二:借助哈希表-O(n)三、代码实现一、题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).二、题目分析方法一:...原创 2019-07-13 13:29:57 · 176 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率与空间效率的平衡】面试题49:丑数(java实现)
《剑指offer》刷题——【时间效率与空间效率的平衡】面试题49:(java实现)一、题目描述二、题目分析方法一:逐个判断每个整数是不是丑数方法二:借助数组保存已找到的丑数,空间换时间三、代码实现一、题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。...原创 2019-07-13 11:36:49 · 299 阅读 · 0 评论 -
《剑指offer》刷题——【代码的鲁棒性】面试题25:合并两个排序的链表(java实现)
《剑指offer》刷题——【代码的鲁棒性】面试题25:合并两个排序的链表(java实现)一、题目描述二、题目分析三、代码实现一、题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。二、题目分析合并两个有序链表的过程:从两个链表的头节点开始,比较两个链表的头节点,小的那一个头节点即为合并后链表的头节点继续合并剩余节点,重复上述比较...原创 2019-06-28 16:12:12 · 238 阅读 · 0 评论 -
《剑指offer》刷题——【代码的鲁棒性】面试题24:反转链表(java实现)
《剑指offer》刷题——【代码的鲁棒性】面试题24:反转链表(java实现)一、题目描述二、题目分析三、代码实现方法一:非递归方法二:递归一、题目描述定义一个函数,输入链表的头结点,反转该链表并输出反转后链表的头结点二、题目分析需要3个指针:指向当前遍历的节点指向前一节点指向后一节点三、代码实现方法一:非递归/*public class ListNode { ...原创 2019-06-28 15:24:35 · 361 阅读 · 0 评论 -
《剑指offer》刷题——【分解让复杂问题简单化】面试题38:字符串的排列(java实现)
《剑指offer》刷题——【分解让复杂问题简单化】面试题38:字符串的排列(java实现)一、题目描述二、题目分析三、代码实现一、题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。二、题目分析把一个字符串看成两部分:1)第一个字符;2)后面所有的字符先...原创 2019-07-03 16:08:36 · 246 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率与空间效率的平衡】面试题51:数组中的逆序对(java实现)
《剑指offer》刷题——【时间效率与空间效率的平衡】面试题51:数组中的逆序对(java实现)一、题目描述二、题目分析方法一:遍历-O(n^2)方法二:归并思想,时间负责度O(nlogn),空间复杂度O(n)三、代码实现一、题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的...原创 2019-07-15 15:41:24 · 275 阅读 · 0 评论 -
《剑指offer》刷题——【举例让抽象问题具体化】面试题30:包含min函数的栈(java实现)
《剑指offer》刷题——【举例让抽象问题具体化】面试题30:包含min函数的栈(java实现)原创 2019-07-01 09:27:44 · 404 阅读 · 0 评论 -
《剑指offer》刷题——【面试中的各项能力】面试题58:翻转字符串(java实现)
《剑指offer》刷题——【面试中的各项能力】面试题58:翻转字符串(java实现)(一)题目一:翻转单词顺序一、题目描述二、题目分析方法一:两次翻转字符串方法二:借助字符串数组(一)题目一:翻转单词顺序一、题目描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student”,则输出“student ...原创 2019-07-25 23:37:01 · 362 阅读 · 0 评论 -
《剑指offer》刷题——【面试中的各项能力】面试题54:二叉搜索树的第k大节点(java实现)
《剑指offer》刷题——【面试中的各项能力】面试题54:二叉搜索树的第k大节点(java实现)一、题目描述二、题目分析三、代码实现一、题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如,(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。二、题目分析中序遍历二叉搜索树,{2,3,4,5,6,7,8},递增排序中序遍历过程中,累加计算访问过的节点数目...原创 2019-07-18 00:06:43 · 213 阅读 · 0 评论 -
《剑指offer》刷题——【面试中的各项能力】面试题57:和为s的数字(java实现)
《剑指offer》刷题——【面试中的各项能力】面试题57:和为s的数字(java实现)(一)题目一:和为s的两个数字一、题目描述二、题目分析方法一:双循环-O(n^2)方法二:双指针-O(n)代码实现(一)题目一:和为s的两个数字一、题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。二、题目分析方法...原创 2019-07-24 00:20:38 · 349 阅读 · 0 评论 -
《剑指offer》刷题——【面试中的各项能力】面试题55:二叉树的深度(java实现)
《剑指offer》刷题——【面试中的各项能力】面试题55:二叉树的深度(java实现)(一) 题目一:二叉树的深度一、题目描述二、题目分析三、代码实现(二)题目二:平衡二叉树一、题目描述二、题目分析方法一:递归——重复遍历方法二:每个节点只遍历一次(一) 题目一:二叉树的深度一、题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的...原创 2019-07-18 23:44:20 · 438 阅读 · 0 评论 -
《剑指offer》刷题——【面试中的各项能力】面试题56:数组中只出现一次的数字(java实现)
《剑指offer》刷题——【面试中的各项能力】面试题56:数组中只出现一次的数字(java实现)一、题目描述一、题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字...原创 2019-07-23 16:03:16 · 333 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率】面试题45:把数组排成最小的数(java实现)
《剑指offer》刷题——【时间效率】面试题45:把数组排成最小的数(java实现)输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。...原创 2019-07-12 10:14:47 · 322 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率】面试题44:数字序列中某一位的数字(java实现)---待做
《剑指offer》刷题——【时间效率】面试题44:数字序列中某一位的数字(java实现)一、题目描述一、题目描述原创 2019-07-12 10:12:50 · 178 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率与空间效率的平衡】面试题53:数字在排序数组中出现的次数(java实现)
《剑指offer》刷题——【时间效率与空间效率的平衡】面试题53:数字在排序数组中出现的次数(java实现)一、题目描述二、题目分析方法一:遍历方法二:二分法一、题目描述统计一个数字在排序数组中出现的次数。二、题目分析方法一:遍历遍历一边数组比较每一个数字统计指定数字出现的次数时间复杂度:O(n)public class Solution { public int ...原创 2019-07-15 23:55:16 · 199 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率与空间效率的平衡】面试题52:两个链表的第一个公共结点(java实现)
《剑指offer》刷题——【时间效率与空间效率的平衡】面试题52:两个链表的第一个公共结点(java实现)一、题目描述二、题目分析方法一:双循环,O(n^2)方法二:Hash法一、题目描述输入两个链表,找出它们的第一个公共结点。二、题目分析方法一:双循环,O(n^2)/*public class ListNode { int val; ListNode next = ...原创 2019-07-15 23:08:59 · 203 阅读 · 0 评论 -
《剑指offer》刷题——【举例让抽象问题具体化】面试题32:从上到下打印二叉树(java实现)
《剑指offer》刷题——【举例让抽象问题具体化】面试题32:从上到下打印二叉树(java实现)原创 2019-07-01 11:19:13 · 296 阅读 · 0 评论 -
《剑指offer》刷题——【举例让抽象问题具体化】面试题31:栈的压入、弹出序列(java实现)
《剑指offer》刷题——【举例让抽象问题具体化】面试题31:栈的压入、弹出序列(java实现)一、题目描述二、题目分析三、代码实现一、题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该...原创 2019-07-01 11:13:05 · 175 阅读 · 0 评论 -
《剑指offer》刷题——【时间效率】面试题42:连续子数组的最大和(java实现)
《剑指offer》刷题——【时间效率】面试题42:连续子数组的最大和(java实现)一、题目描述二、题目分析方法一:枚举所有子数组求和O(n^2)方法二:举例分析数组的规律一、题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或者多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)二、题目分析方法一:枚举所有子数组求和O(n^2)枚举数组的所有子数组...原创 2019-07-09 09:13:08 · 216 阅读 · 0 评论 -
《剑指offer》刷题——【分解让复杂问题简单化】面试题37:序列化二叉树(java实现)
《剑指offer》刷题——【分解让复杂问题简单化】面试题37:序列化二叉树(java实现)一、题目描述二、题目分析三、代码实现一、题目描述请实现两个函数,分别用来序列化和反序列化二叉树二、题目分析序列化:前序遍历根节点开始,左子树,右子树遍历二叉树碰到null指针,将null指针序列化为一个特殊的字符$节点间以 ,隔开递归反序列化:根反序列,第一个读出来的字符...原创 2019-07-03 11:32:36 · 234 阅读 · 0 评论 -
《剑指offer》刷题——【回溯法】面试题13:机器人的运动范围(java实现)
《剑指offer》刷题——【回溯法】面试题12:机器人的运动范围一、题目描述二、解题思路三、代码实现四、测试一、题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35...原创 2019-04-27 20:57:52 · 292 阅读 · 0 评论 -
《剑指offer》刷题——【回溯法】面试题12:矩阵中的路径(java实现)
《剑指offer》刷题——【回溯法】面试题12:矩阵中的路径一、回溯法1. 什么是回溯法2. 适用场景3. 形象化为树形结构二、题目描述三、解题思路四、代码实现一、回溯法1. 什么是回溯法回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的...原创 2019-04-27 18:07:39 · 501 阅读 · 0 评论 -
《剑指offer》刷题——【查找和排序】面试题11:旋转数组的最小数字(java实现)
《剑指offer》刷题——【查找和排序】面试题10:旋转数组的最小数字一、面试考点1. 查找:2. 排序:3. 快排实现:4. 员工年龄排序:二、题目描述三、解题思路1. 旋转数组特点:2. 使用二分查找法:3. 代码实现:4. 特殊情况:一、面试考点1. 查找:(1)顺序查找;(2)二分查找:重点,必须能手写完整的代码(循环、递归)(3)哈希表查找:考察重点在于对应的数据结构而不是算...原创 2019-04-26 17:29:46 · 234 阅读 · 0 评论 -
《剑指offer》刷题——【树】面试题8:二叉树的下一个节点(java实现)
《剑指offer》刷题——【树】面试题8:二叉树的下一个节点一、题目描述:二、解题思路(分三种情况):1. 如果当前结点有右子树2. 如果当前节点没有右子树(1) 如果当前节点是它父节点的左子节点(2)如果当前节点是它父节点的右子节点三、代码实现:一、题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针...原创 2019-04-22 15:12:40 · 873 阅读 · 1 评论 -
《剑指offer》刷题——【递归循环】面试题10:斐波那契数列/青蛙跳台阶问题(java实现)
《剑指offer》刷题——【递归循环】面试题10:斐波那契数列、青蛙跳台阶问题一、题目描述二、解题思路1. 书上常见解法,递归(效率低)2. 改进递归,从下往上计算,把递归的算法用循环实现,时间复杂度O(n)三、斐波那契数列应用——青蛙跳台阶问题1. 题目描述2. 解题思路一、题目描述 求斐波那契数列的第n项: 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项,定义如下:n...原创 2019-04-26 11:12:17 · 552 阅读 · 0 评论 -
《剑指offer》刷题——【树】面试题7:重建二叉树(java实现)
《剑指offer》刷题——【字符串】面试题5:替换空格一、题目描述:二、解题思路:三、代码实现:一、题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。二、解题思路:在二叉树的前序遍历中,第一个...原创 2019-04-22 10:26:00 · 362 阅读 · 0 评论 -
《剑指offer》刷题——【字符串】面试题5:替换空格(java实现)
《剑指offer》刷题——【字符串】面试题5:替换空格题目描述:解决方案:方法一:在原来的字符串上进行替换 O(n^2)——从前到后替换存在问题及解决思路方法思路方法二:在原来的字符串上进行替换O(n^2)——从后到前替换方法思路代码实现题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20...原创 2019-04-21 11:53:38 · 353 阅读 · 0 评论 -
《剑指offer》刷题——【栈与队列】滑动窗口的最大值
《剑指offer》刷题——【栈与队列】-<滑动窗口的最大值>题目描述:题目分析:代码实现:题目描述:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3...原创 2019-04-12 21:29:14 · 241 阅读 · 0 评论 -
《剑指offer》刷题——【数组】面试题3:数组中重复的数字
《剑指offer》刷题——【数组】-<数组中重复的数字>题目一、找出数组中重复的数字方法一:先排序,再扫描方法二:哈希表方法三:数组重排题目二、不修改数组找出重复的数字方法一:和上一题方法三同方法二:二分查找题目一、找出数组中重复的数字在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组...原创 2019-04-15 20:00:48 · 318 阅读 · 0 评论 -
《剑指offer》刷题——【栈与队列】用两个栈实现队列
《剑指offer》刷题——【栈与队列】-<用两个栈实现队列>题目描述:题目分析:1. 用两个栈实现队列操作:2.用两个队列实现栈操作:代码实现:(两个栈实现队列)考虑线程安全题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题目分析:栈的的特点:后入先出【LIFO】队列的特点:先入先出【FIFO】1. 用两个栈实现队列操作:...原创 2019-04-12 15:07:35 · 335 阅读 · 0 评论 -
《剑指offer》刷题——【链表】从尾到头打印链表
《剑指offer》刷题——【链表】-<从尾到头打印链表>问题分析:递归实现:1. 无返回值2. 有返回值(ArrayList)问题分析:从头到尾打印链表比较简单,那么我们首先一起回归下从头至尾打印思路一:将链表反转,改变链表方向,再打印,但该方法需要额外的操作思路二:借助栈,栈的特点是先入后出,刚好使用此场景,但该方法需要维护一个额外的栈空间思路三:递归,每访问一个节点,先...原创 2019-04-11 23:09:48 · 206 阅读 · 0 评论 -
《剑指offer》刷题——【链表】删除链表中重复的结点
《剑指offer》刷题——【链表】-<删除链表中重复的结点>题目分析:方法一:借助Hashtable方法二:双重循环遍历问题升级:重复结点不保留方法一:递归法递归的三大元素:1. 明确这个函数要干什么:2. 寻找递归结束条件:3.找出函数的等价关系:题目分析:方法一:借助Hashtable遍历链表,把遍历到的值存储到一个Hashtable若当前访问的值在Hashtable中已...原创 2019-04-11 22:21:27 · 392 阅读 · 0 评论