
剑指Offer
文章平均质量分 50
详解《剑指Offer》书籍内容
非正经程序员
曾就职于某医疗领域行业Top大厂,现某创业公司负责软件架构设计;
擅长语言:C/C++、Python、Java;
擅长领域:计算机图形学、图像算法、音视频编解码、GPU并行计算、人工智能、架构设计等方向;
专注分享技术干货和工作经验,关注我,不迷路。
展开
-
剑指Offer之用两个栈实现队列
一:题目 用两个栈实现一个队列。完成在队列尾部插入结点和在队列头部删除结点的功能。 二:题目分析 首先,让我们知道队列是“先进先出”的特性,而栈是“先进后出”的特性。那么使用两个栈实现一个队列的功能。我们可以想到的是一个栈用于作为入队列的容器,另一个栈可以用来作为出队列的容器。 根据栈的“先进后出”的特性,栈二中的内容可以存放栈一的栈顶元素。然后栈二的栈顶元素就是入队的第一个元素。那么就会有如下的操作步骤: 入队列操作即就是入栈一的操作; 出队列时,先判断栈二中是否有元素,有元素则出栈,原创 2021-08-01 00:21:31 · 367 阅读 · 1 评论 -
剑指Offer之重建二叉树
一:题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下的二叉树并输出它的头结点。二叉树结点的定义如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; } 二:题目分析 首先,我原创 2021-07-26 00:38:12 · 187 阅读 · 0 评论 -
剑指Offer之从尾到头打印链表
一:题目 输入一个链表的头结点,从尾到头反过来打印出每个结点的值。 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; } 二:题目分析 对于该题,一般又两种解法,分别是 使用栈结构,先将结点按顺序压栈,然后进行出栈输出。这种符合先进后出的原则。 一般的符合先进后出的原则,我们就可以使用递归的手法进行输出。因为函数的调用也是以栈的形式进行的。不过如果链表很长,则会引起栈溢出的现象。 三:源码 栈方式: void原创 2021-04-06 00:15:18 · 163 阅读 · 0 评论 -
剑指Offer之替换空格(面试题四)
一:题目 请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.” 二:题目分析 熟悉网络编程的同学应该都知道为什么要将空格替换成%20,这里就不做过多赘述。 1)一般思路 对于该题,一般的解法,就是循环遍历该字符串中的每一个字符,遇到空格后,将空格后的字符串向右移动两位,然后将空格和空出来的位置替换成%20。 对于上面的思路,很明显,每遇到一个空格就要移动O(n)个字符。假设有O(n)个空格字符的字符串,那么原创 2021-03-26 00:08:23 · 147 阅读 · 0 评论 -
剑指Offer之有序数组查找
一:题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 二:题目分析 如题所示,它的行和列都是递增的。那么我们需要试图找到边界点,这个边界点可以帮助我们排除一整行或一整列。 看左上角的1,比1大的可以是第一列和第一行,所以很难排除一整行或一整列。 看左下角的6,比6大的数可以原创 2021-03-06 13:30:20 · 188 阅读 · 0 评论 -
剑指Offer之实现一个单例模式
一:题目 实现一个类, 我们只能生成该类的一个实例。 二:题目分析 该题也是常见的题目。实现单例,首先单例模式是设计模式中最常见的模式之一。设计单例模式的话,通常需要注意以下几点: 类的构造函数、拷贝构造函数、赋值函数声明为受保护成员或私有成员。 获取单例的函数设置为静态成员函数 注意线程安全性 双层判断可以提高获取单例类实例的效率。 三:源码设计 结合C++语言的特性,这里我们使用了模板类来完成单例模式的设计。该类为单例类的基类,继承该类的子类都可以成为一个单例类。这种设计具有平台化的原创 2021-03-06 00:09:30 · 151 阅读 · 0 评论 -
剑指Offer之MyString
一:题目 如下为类型CMyString的声明,请为该类型添加赋值运算符函数。 以上是剑指Offer的面试题一,这里我直接实现一下整个字符串类,该面试题出现的频率还是挺高的。主要考察了类的封装、函数重载、构造函数、拷贝构造函数、深浅拷贝、赋值函数、左值、const常量、编码规范等技术点。麻雀虽小五脏俱全,知识点还挺密集的,这大概就是考察频率高的原因吧。 二:题目分析 构造函数形参是可缺省的,等同于函数的重载。 拷贝构造函数的形参是const引用,如果不使用引用,会导致在传参时,循环调用拷贝构造函数,原创 2021-03-04 23:14:16 · 144 阅读 · 5 评论