![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
古老的屋檐下
电子科技大学信息与通信工程硕士
字节跳动基础架构(存储)工程师
展开
-
剑指offer算法题033:丑数
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第033道剑指offer算法题:题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。分析通俗易懂的解释:首先从丑数的定义我们知原创 2020-06-27 23:25:31 · 274 阅读 · 0 评论 -
剑指offer算法题032:把数组排成最小的数
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第032道剑指offer算法题:题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。分析这道题思路上比较难,想到了就比较简单im原创 2020-06-27 20:03:56 · 273 阅读 · 0 评论 -
剑指offer算法题031:整数中1出现的次数(从1到n整数中1出现的次数)
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第030道剑指offer算法题:题目描述求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍原创 2020-06-27 20:01:31 · 324 阅读 · 0 评论 -
剑指offer算法题030:连续子数组的最大和
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第030道剑指offer算法题:题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期原创 2020-06-27 19:59:13 · 252 阅读 · 0 评论 -
剑指offer算法题029:最小的K个数
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第029道剑指offer算法题:题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。分析这道题比较直接,直接上优先队列。另外,最大堆和最小堆大是两种典型的数据结构,这个一定要知道原理。原创 2020-06-27 19:56:05 · 363 阅读 · 0 评论 -
剑指offer算法题028:数组中出现次数超过一半的数字
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第028道剑指offer算法题:题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。分析比较有意思原创 2020-06-27 19:53:15 · 351 阅读 · 0 评论 -
剑指offer算法题027:字符串的排列
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第026道剑指offer算法题:题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。分析典型的全排列问题,这道题有很多的变种,但是本质原创 2020-06-27 19:50:21 · 334 阅读 · 0 评论 -
剑指offer算法题026:二叉搜索树与双向链表
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第026道剑指offer算法题:题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。分析典型的二叉树中序遍/**public class TreeNode { int val =原创 2020-06-27 19:42:43 · 396 阅读 · 0 评论 -
剑指offer算法题025:复杂链表的复制
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第025道剑指offer算法题:题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返原创 2020-06-27 19:39:36 · 219 阅读 · 0 评论 -
剑指offer算法题024:二叉树中和为某一值的路径
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第024道剑指offer算法题:题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。分析递归遍历二叉树即可import java.util.ArrayLis原创 2020-06-27 19:36:49 · 261 阅读 · 0 评论 -
剑指offer算法题023:二叉搜索树的后序遍历序列
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第023道剑指offer算法题:题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。分析经典的二叉树题目,二叉树的前中后层序遍历相关算法一定要熟public class原创 2020-06-27 19:34:03 · 195 阅读 · 0 评论 -
剑指offer算法题022:从上往下打印二叉树
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第022道剑指offer算法题:题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。分析这题不难,但是很经典。看答案前建议自己先想一下思路import java.util.ArrayList;import java.util.LinkedList;原创 2020-06-27 19:24:58 · 185 阅读 · 0 评论 -
剑指offer算法题021:栈的压入、弹出序列
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第021道剑指offer算法题:题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5原创 2020-06-27 19:21:13 · 178 阅读 · 0 评论 -
剑指offer算法题020:带min接口的栈
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第020道剑指offer算法题:题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。分析:这题不难,但是比较有意思,原创 2020-06-27 19:14:24 · 185 阅读 · 0 评论 -
剑指offer算法题019:顺时针打印矩阵
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第019道剑指offer算法题:题目描述这题不是考察算法,主要是考察代码能力。因为本题没有算法可言,分层一次打印即可。但是本地很容易出错,不信?不要看答案,A4纸上自己尝试写一遍答案试试。import java.util.ArrayList;public cla原创 2020-06-27 19:08:35 · 180 阅读 · 0 评论 -
剑指offer算法题018:二叉树的镜像
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第018道剑指offer算法题:题目描述操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树分析:典型的递归问题,递归在树相关问题中很常见,不是很难,大家多写写画画就可以理解了,算法题一定要建立自己的理解上/**public class原创 2020-06-27 19:04:20 · 196 阅读 · 0 评论 -
剑指offer算法题017:树的子结构
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第017道剑指offer算法题:题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析:这题比较简单,依次判断:B的左子树是不是A左子树的子结构、B的右子树是不是A右子树的子结构/**public class原创 2020-06-27 15:52:16 · 177 阅读 · 0 评论 -
剑指offer算法题016:合并两个排序的链表
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第016道剑指offer算法题:题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。分析:这题比较简单,直接开干/*public class ListNode { int val; ListNod原创 2020-06-27 15:49:53 · 139 阅读 · 0 评论 -
剑指offer算法题015:反转链表
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第015道剑指offer算法题:题目描述输入一个链表,反转链表后,输出新链表的表头。分析:看着比较简单,手写代码出错的可能性还是比较高,也是比较经典的一道面试题/*public class ListNode { int val; ListNo原创 2020-06-27 15:47:12 · 187 阅读 · 0 评论 -
剑指offer算法题014:链表中倒数第k个结点
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第014道剑指offer算法题:题目描述输入一个链表,输出该链表中倒数第k个结点。分析:很经典的快慢指针思路,很多链表题都可以优先考虑这类解法/*public class ListNode { int val; ListNode next原创 2020-06-27 15:43:32 · 199 阅读 · 0 评论 -
剑指offer算法题013:调整数组顺序使奇数位于偶数前面
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第013道剑指offer算法题:题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。分析:这个题是时间和空间的平衡,如果是空间复杂度最低原创 2020-06-27 15:33:39 · 172 阅读 · 0 评论 -
剑指offer算法题012:小数的整数次方
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第012道剑指offer算法题:题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0分析:考察指数的正负、底数是否为零等情况。这类题一般考察位运算:举例原创 2020-06-27 15:11:42 · 278 阅读 · 0 评论 -
剑指offer算法题011:二进制中1的个数
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第011道剑指offer算法题:题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析:如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边原创 2020-06-27 15:02:50 · 241 阅读 · 0 评论 -
剑指offer算法题010:矩形覆盖
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法****。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第010****道剑指offer算法题:题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:分析:2target的大矩形,和原创 2020-06-27 14:57:00 · 432 阅读 · 0 评论 -
剑指offer算法题009:变态跳台阶
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第009道剑指offer算法题:题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有。分析:n个台阶会有一次n阶的跳法。分析如下:f(n) = f(n-1) + f(n-2) + f(n-3) + … +原创 2020-06-27 14:51:04 · 207 阅读 · 0 评论 -
剑指offer算法题008:跳台阶
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第008道剑指offer算法题:题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。注:本题是典型的递归思路,理清本题的递归逻辑可以有助于加深对递归的理解。递归是二叉树类算法题中的最常用解法原创 2020-06-27 14:33:46 · 229 阅读 · 0 评论 -
剑指offer算法题007:斐波那契数列(90%不知道最优解法)
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第007道剑指offer算法题:题目描述把大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)注:是不是看着很简单,下面的优化思路是本道题需要分享的核心另外, 斐波那契数列的最优解法(文末)基本90%原创 2020-06-27 14:29:23 · 468 阅读 · 0 评论 -
剑指offer算法题006:旋转数组的最小数字
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第006道剑指offer算法题:题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。例如,输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。原创 2020-06-27 14:17:43 · 199 阅读 · 0 评论 -
剑指offer算法题005:用两个栈实现队列
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第005道剑指offer算法题:题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。解析:使用2个栈:入队:将元素进栈A出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈;如果不为空原创 2020-06-27 14:11:49 · 193 阅读 · 0 评论 -
剑指offer算法题004:重建二叉树
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第004道剑指offer算法题:题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉原创 2020-06-27 12:55:46 · 194 阅读 · 0 评论 -
剑指offer算法题003:从尾到头打印链表
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第003道剑指offer算法题:题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList or Vector。解析:使用递归可以比较简洁的实现,递归的思想在二叉树相关的算法题目中出现的频率更多,递归的思想需要着重训练。/*** publ原创 2020-06-27 12:28:49 · 160 阅读 · 0 评论 -
剑指offer算法题002:替换空格
小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第002道剑指offer算法题:题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为:We Are Happy. 则经过替换之后的字符串为: We%20Are%20Happy。思路:从前向后记录‘ ’数目,从后向前替换‘ ’。重点原创 2020-06-27 12:16:52 · 215 阅读 · 0 评论