
【专项】《剑指Offer》
《剑指Offer》阅读
南方有乔木
这个作者很懒,什么都没留下…
展开
-
《剑指Offer》面试题归类目录
《剑指Offer》面试题归类目录-------------------------1 知识点:二叉树-------------------------面试题6:重建二叉树面试题18:树的子结构面试题19:二叉树的镜像 面试题23:从上往下打印二叉树面试题24:二叉搜索树的后序遍历序列-------------------------2 链表-------------------------面试题5...原创 2018-06-21 15:09:56 · 357 阅读 · 0 评论 -
《剑指Offer》面试题3:二维数组中的查找
《剑指Offer》面试题3:二维数组中的查找题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:代码:/* 《剑指Offer——名企面试官精讲典型编程题》代码著作权所有者:何海涛*//*===========面试题3:二维数组的查找=========...原创 2018-05-10 21:23:40 · 187 阅读 · 0 评论 -
《剑指Offer》面试题4:替换空格
《剑指Offer》面试题4:替换空格题目描述 请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。解题思路测试用例代码/*《剑指Offer——名企面试官精讲典型编程题》代码 著作权所有者:何海涛*/#include "stdio.h"#include <string>/*lengt...原创 2018-05-29 16:36:34 · 207 阅读 · 0 评论 -
《剑指Offer》面试题5:从尾到头打印链表
《剑指Offer》面试题5:从尾到头打印链表链表末尾添加一个新结点&找到结点并删除#include <iostream>using namespace std;struct ListNode{ int value; ListNode *next;};//往该链表的末尾添加一个结点void AddToTail(ListNode **pHead, int valu...原创 2018-05-29 20:18:31 · 205 阅读 · 0 评论 -
《剑指Offer》面试题6:重建二叉树
《剑指Offer》面试题6:重建二叉树题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路测试用例代码/* 《剑指Offer——名企面试官精讲典型编程题》代码 著作权所有者:何海涛*/#...原创 2018-06-04 13:35:42 · 300 阅读 · 0 评论 -
《剑指Offer》面试题7:用两个栈实现队列
《剑指Offer》面试题7:用两个栈实现队列题目描述 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。template <typename T> class CQueue{public: CQueue(void); ~CQueue(void); void appen...原创 2018-06-04 16:26:53 · 348 阅读 · 0 评论 -
《剑指Offer》面试题8:旋转数组的最小数字
《剑指Offer》面试题8:旋转数组的最小数字1 快速排序include <ctime> // ctime #include <iostream>using namespace std;//生成low和high之间的随机数int RandomInRange(int low,int high){ srand(time(NULL)); int rn...原创 2018-06-11 10:47:08 · 245 阅读 · 0 评论 -
《剑指Offer》面试题9:斐波那契数列
《剑指Offer》面试题9:斐波那契数列 如果我们需要重复地多次计算相同的问题,通常可以选择用递归或者循环两种不同的方法。递归是在一个函数的内部调用函数本身。循环则是通过设置计算的初始值及终止条件,在一个范围内重复运算。 递归优缺点: 1)基于递归实现的代码比基于循环实现的代码简洁得多; 2)递归实现的效率不如循环; 3)递归中很多计算有可能是重复的; 4)调用...原创 2018-06-11 15:02:20 · 280 阅读 · 0 评论 -
《剑指Offer》面试题10:二进制中1的个数
《剑指Offer》面试题10:二进制中1的个数1 面试题10:二进制中1的个数题目描述 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此,如果输入9,该函数输出2。解题思路 (1)可能引起死循环的解法 (2)常规解法 (3)能给面试官带来惊喜的解法测试用例代码/* 《剑指Offer——名企面试官精讲典型编程题》代码...原创 2018-06-14 12:00:31 · 262 阅读 · 0 评论 -
《剑指Offer》面试题11:数值的整数次方
《剑指Offer》面试题11:数值的整数次方1 代码的规范性 影响代码规范性的因素:书写、布局和命名。 用完整的英文单词组合命名变量和函数。2 代码的完整性 1)从3方面确保代码的完整性 2)3种错误处理的方法 3 面试题11:数值的整数次方题目描述 实现函数double Power(double base,int exponent),求base的exp...原创 2018-06-14 20:31:00 · 251 阅读 · 0 评论 -
《剑指Offer》面试题12:打印1到最大的n位数
《剑指Offer》面试题12:打印1到最大的n位数知识点 解决大数的能力题目描述 输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1,、2、3一直到最大的3位数及999。解题思路测试用例代码/* 《剑指Offer——名企面试官精讲典型编程题》代码著作权所有者:何海涛*/#inclu...原创 2018-06-15 15:51:27 · 225 阅读 · 0 评论 -
《剑指Offer》面试题13:在O(1)时间删除链表结点
《剑指Offer》面试题13:在O(1)时间删除链表结点题目描述 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};void DeleteNode(ListNode **pListHead, ListNode pToBeDelet...原创 2018-06-15 22:39:31 · 150 阅读 · 0 评论 -
《剑指Offer》面试题14:调整数组顺序使奇数位于偶数前面
《剑指Offer》面试题14:调整数组顺序使奇数位于偶数前面题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路最简单思路 不考虑时间复杂度,最简单的思路是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。将拿出的偶数放到数组末尾空位。由于每碰到一个偶数就要挪动...原创 2018-06-17 11:04:51 · 1289 阅读 · 0 评论 -
《剑指Offer》面试题15:链表中倒数第k个结点
《剑指Offer》面试题15:链表中倒数第k个结点1 代码的鲁棒性 鲁棒(Robust)/健壮性是指程序能够判断输入是否合乎规范要求,并对不合要求的输入予以合理的处理。 容错性是鲁棒性的一个重要体现,不鲁棒的软件在发生异常事件时,会出现不可预见的诡异行为,或者整个软件崩溃。 提高代码鲁棒性的有效途径是进行防御式编程,即预见在什么地方可能会出现什么问题,并问这些可能出现的问题制定处...原创 2018-06-17 14:42:31 · 213 阅读 · 0 评论 -
《剑指Offer》面试题16:反转链表
《剑指Offer》面试题16:反转链表题目描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。解题思路: 为了正确的反转一个链表,需要调整链表中指针的方向。为了将调整指针这个复杂的过程分析清楚,我们可以借助图形来直观的分析。在图中所示的链表中,h,i,j是3个相邻的结点。假设经过若干的操作,我们已经把结点h之前的指针调整完毕,这些结点的m_pNext都指向前面...原创 2018-06-17 15:41:45 · 186 阅读 · 0 评论 -
《剑指Offer》面试题17:合并两个排序的链表
《剑指Offer》面试题17:合并两个排序的链表题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图中的链表1和链表2,则合并之后的升序链表3所示。解题思路 首先分析合并两个链表的过程。我们的分析从合并两个链表的头结点开始。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点,如图所示: 我们继续合并两个...原创 2018-06-17 17:53:54 · 224 阅读 · 0 评论 -
《剑指Offer》面试题18:树的子结构
《剑指Offer》面试题18:树的子结构题目描述 输入两课二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:解题思路 要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步在树A中找到和树B的根结点的值一样的结点R,第二步再判断树A中以R为根结点的子树是不是包含和B一样的结构。 通常我们都会采用递归的方式,但是这里需要注意的检查边界条件,即空指针。测试用例...原创 2018-06-17 19:59:04 · 211 阅读 · 0 评论 -
《剑指Offer》面试题19:二叉树的镜像
《剑指Offer》面试题19:二叉树的镜像题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 二叉树结点定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};解题思路 求一棵树的镜像的过程:我们先前序遍历这棵树的每个结...原创 2018-06-19 14:44:30 · 172 阅读 · 0 评论 -
《剑指Offer》面试题20:顺时针打印矩阵
《剑指Offer》面试题20:顺时针打印矩阵//=======以二维int型数组为例=========cin >> m >> n; // m,n分别为行数和列数int ** p;p = new int*[m]; //以一个指针的指针指向一个指针数组for...原创 2018-06-19 16:40:02 · 178 阅读 · 0 评论 -
《剑指Offer》面试题21:包含min函数的栈
《剑指Offer》面试题21:包含min函数的栈题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1)。解题思路 加入一个辅助栈用来存储最小值集合。(这里要注意题目并没有说栈内的元素类型,因此要尽量通用)。测试用例代码/* 《剑指Offer——名企面试官精讲典型编程题》代码著作权所有者:...原创 2018-06-19 19:00:00 · 200 阅读 · 0 评论 -
《剑指Offer》面试题22:栈的压入、弹出序列
《剑指Offer》面试题22:栈的压入、弹出序列题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 解题思路 判断一个序列是不是栈的弹出顺序的规律:如果下一个弹出的...原创 2018-06-21 10:21:01 · 455 阅读 · 0 评论 -
《剑指Offer》面试题23:从上往下打印二叉树
《剑指Offer》面试题23:从上往下打印二叉树题目描述 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。解题思路 按照层次遍历的方法,使用队列辅助。 1.将根结点加入队列。 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若有右子树,将其加入队列。 3.直到队列为空,表明已经打印完所有结点。测试用例 功能测试(输入的二叉树既有...原创 2018-06-21 11:35:36 · 182 阅读 · 0 评论 -
《剑指Offer》面试题24:二叉搜索树的后序遍历序列
《剑指Offer》面试题24:二叉搜索树的后序遍历序列题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是返回true,否则返回false。假设输入的数组的任意两个数字互不相同。解题思路 要明确两个概念: 1. 二叉搜索树的特点,就是如果有对任何一个非空结点,假如左子树存在,那么左子树的中任意一个结点都比该根结点小,假如右子树存在,那么右子树中的任何一...原创 2018-06-21 14:40:06 · 243 阅读 · 0 评论 -
《剑指Offer》面试题25:二叉树中和为某一值的路径
《剑指Offer》面试题25:二叉树中和为某一值的路径知识点 二叉树前序遍历题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点定义如下:struct BinaryTreeNode { int m_nValue; BinaryTreeNode *m_p...原创 2018-07-05 16:28:18 · 197 阅读 · 0 评论 -
《剑指Offer》面试题26:复杂链表的复制
《剑指Offer》面试题26:复杂链表的复制 知识点 分解复杂问题题目描述 请实现一个函数用于复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL。结点的C++定义如下:struct ComplexListNode{ int m_nValue; ComplexL...原创 2018-07-06 15:46:09 · 157 阅读 · 0 评论 -
《剑指Offer》面试题27:二叉搜索树与双向链表
《剑指Offer》面试题27:二叉搜索树与双向链表题目描述 二叉树结点定义如下:truct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};解题思路测试用例代码(原书)/* 《剑指Offer——名企面试官精讲典型编程题》代码著作权所有者:何海涛*/#includ...原创 2018-07-11 10:06:07 · 181 阅读 · 0 评论 -
《剑指Offer》面试题28:字符串的排列
《剑指Offer》面试题28:字符串的排列知识点 递归题目描述 输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出字符a、b、c所排列出来的所有字符串abc、acb、bac、bca、cab和cba。解题思路代码(牛客网)class Solution {public: vector<string> Permutation(string s...原创 2018-07-12 11:15:59 · 1109 阅读 · 1 评论 -
《剑指Offer》面试题35:第一个只出现一次的字符
《剑指Offer》面试题35:第一个只出现一次的字符知识点 如果需要判断多个字符是不是在某个字符串里出现过或者统计多个字符在某个字符串中出现的次数,我们可以考虑基于数组创建一个简单的哈希表,这样可以用很小的空间消耗换来时间效率的提升。题目描述 在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。解题思路 ...原创 2018-09-13 10:29:43 · 254 阅读 · 0 评论 -
《剑指Offer》面试题41:和为s的两个数字 VS 和为s的连续正数序列
《剑指Offer》面试题41:和为s的两个数字 VS 和为s的连续正数序列 知识点 知识迁移题目描述1 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。代码1(牛客网)class Solution {public:/*数列满足递增,设两个头尾两个指针i和j(代码里为le...原创 2018-09-08 16:48:03 · 152 阅读 · 0 评论