![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer学习
方寸间沧海桑田
欲买桂花同载酒,终不似,少年游
展开
-
【剑指offer】面试题2 单例模式Singleton
1.主旨标准的单例模式考察过程,而在设计模式中单例模式可以分为“饿汉式”与“懒汉式”,对于这两种方式的具体讲解可以查看我之前的文章设计模式学习(一) 单例模式 Singleton。在此之外,单例模式的同时还需要考虑多线程以及优化方面的考虑,所以这里参照书上的例子,实现了四种格式的单例模式。2.考点考点1:单例模式的基本单线程实现,包括饿汉式与懒汉式;考点2:单例模式的基本多线程实现,...原创 2019-07-09 14:25:03 · 161 阅读 · 0 评论 -
【剑指offer】面试题7 重建二叉树
1.考点考点1:二叉树的前中后遍历方式,以及三者独特的特性;考点2:递归的原理辨析(递归三类中的多路递归,就是多叉树结构);2.解题(1)前/后序遍历时,其根节点位于首/尾位置,而其余的字段可以被分成左子树和右子树,而两者的左子树和右子树内部,又可以分为多个左子树和右子树,并且两两分离,不会有穿插。(2)中序遍历时,根节点在遍历中间,而左右两侧分别为嵌套的左子树和右子树,与前/后序...原创 2019-07-23 14:12:34 · 119 阅读 · 0 评论 -
【Leecode初级算法—数组】解题思路总结
最近刷了初级算法的数组里面的题,总结出了对于数组类问题的解决方法1.暴力法暴力法往往简单易想,当然其效率往往不是最好的,但是如果实现想不出优秀的方案,最好还是写出暴力法的解决方法,并且有总比没有好2.双指针法双指针是泛用性最强的一个算法,其主要适用于数组中从前往后,或从后往前的数据交换过程,通过前后两个/首尾两个指针指向不同的数据,来进行数据的交换或处理。3.逻辑特性分析法...原创 2019-07-22 10:57:24 · 274 阅读 · 0 评论 -
【剑指offer】面试题15 二进制中1的个数
到这里第二章就结束了,之后的题目我将会以章的结构来统一撰写博客,毕竟一篇一篇地写意义不太高1.考点考点1:二进制的运用:与&,或|,异或^三种运算符的巧用;考点2:对于正负数的二进制理解:32位系统,共有0-31共32位的数据,其中第31位为符号位,正数为0负数为1,所以正数的int范围为(1,231-1),负数的int范围为(-231,-1);考点3:对于正负数的计算机表述...原创 2019-07-25 17:49:19 · 136 阅读 · 0 评论 -
【剑指offer】面试题14 剪绳子
1.考点考点1:动态规划:核心思想为“从上到下分析问题,从下往上解决问题”,另外的三个特性为:① 求一个问题的最优解(最大值/最小值);② 整体最优解 = 各个子问题的最优解相加; ③ 小问题之间有共同的各个子小问题;这些是动态规划的特性,在分析问题时可以从这些角度来考虑,当然核心思想不仅仅只用在这些问题,可以用在很多相关问题里。(比如推导出了递推类公式:f(n) = max(f(i)*f(n...原创 2019-07-25 15:45:06 · 157 阅读 · 0 评论 -
【剑指offer】面试题13 机器人的运动范围
1.考点考点1:对于二维数组的遍历理解,其往往是个一维数组存储,将其理解为二维数组,那么在知道二维数组的行rows与列cols的情况下,任意的位置即为row*cols+col;考点2:试探回溯法在不同的寻路问题中的使用情况,比如本题其实主要是使用了深度优先的试探方法,其回溯过程其实并没有很明显的体现,主要就是在完成一个分支后return count值,而随着分支的不断结束而不断地进行下一个递...原创 2019-07-25 11:04:16 · 252 阅读 · 0 评论 -
【剑指offer】面试题12 矩阵中的路径
1.考点考点1:试探回溯法的运用:这个方法说穿了就是迷宫寻径,被称为“蛮力法”的升级版确实不为过,主要就是在各个方向不断地向前试探,直到试探到尽头则依次回溯。这种方法没有最快的到达终点的办法,一直都是属于有哪条路就走哪条路,某种意义上和深度优先搜索算法比较接近,不过试探回溯的本质是有序的,深度优先搜索的本质是无序的。考点2:对于递归与试探回溯的联合运用:试探回溯法的中的回溯操作,往往是借助递...原创 2019-07-24 22:12:28 · 226 阅读 · 0 评论 -
【剑指offer】面试题11 旋转数组的最小数字
1.考点考点1:对二分查找的深度理解,虽然二分查找只能找排序的数组,但是本题是属于排序数组的变种,可以分解为两个排序数组来考虑,而与之对应类似情况也应该多考虑;考点2:对新知识的理解能力,数组旋转这个词可能有很多种定义,而数组的排序方式也可能有正有反,比如此题中数组为正序排列,如果是反序排列的话那么所有代码都要反着来写,所以一是要快速且准确地理解新概念,二是不懂就要问;2.代码代码写...原创 2019-07-24 15:46:02 · 198 阅读 · 0 评论 -
【剑指offer】面试题11前置 查找与快排
1.考点:考点1:对于二分查找的多种实现方式(ABC),不同版本的特色不同;考点2:Fibonacci查找的实现方式,以及其具体时间复杂度的了解;考点3:快速排序算法的思想以及实现方式(核心为快速划分算法);2.代码三种二分查找实现的过程都是小不同,但是特色均不同,主要是记住A这种最基本的形式,同时切记二分查找被用于排序数组,不要使用到无序查找中;Fibonacci查找实际上比A...原创 2019-07-24 12:06:27 · 201 阅读 · 0 评论 -
【剑指offer】面试题10 斐波那契数列与跳台阶
1.考点考点1:斐波那契数列的多种实现方式掌握,以及其变种的掌握(前移或后移);考点2:对于递归与循环的概念的理解程序;2.思想思想的核心就是要知道,使用递归代码确实会简洁,但是会导致不必要的内存占用率;而使用循环往往代码结构较为复杂一些,不过内存占用很少,结合两种思想的动态规划方法相对来说最简洁且空间利用率也低,不过传统的递归时间复杂度为O(2^n),而改进后的众多迭代、递归与动态...原创 2019-07-23 21:16:47 · 136 阅读 · 0 评论 -
【剑指offer】面试题7前置 二叉树的数据结构实现
这几天尬在二叉表的实现了,发现删除节点是真的写的头疼,最后还是没有实现。迭代遍历也是,但是掌握了思想之后也还是能实现,大概就这样吧1.二叉树类与二叉树节点类template<typename T> class BinaryTreeNode{public: T m_value; int m_height; BinaryTreeNode() {} BinaryTreeN...原创 2019-07-16 22:04:13 · 140 阅读 · 0 评论 -
【剑指offer】面试题8 二叉树的下一节点
1.考点考点1:对于中序遍历的理解;(也要对此拓展到前序遍历与后序遍历)考点2:如何在一个二叉树中找到一个点的下一个点;(二叉树的结构理解)2.思路二叉树的前中后序遍历中,每种的遍历方式不同,对于找到某一个点的下一个点或上一个点的问题,只需要绘制出二叉树图,然后假设某一点为某节点的左节点/右节点,以及假设其有左子树也有右子树,那么这个节点就是一个X型结构,这个X型节点根据所述的上一节...原创 2019-07-23 17:35:21 · 137 阅读 · 0 评论 -
【剑指offer】面试题6 从尾到头打印链表
1.主旨这道题就是一个很基本的对于单向链表结构的考察,而单向链表的节点结构最基本的就是一个value值和一个next指针,只要清楚这一点,那么无论是从尾到头打印、存储,抑或是从头到尾打印、存储就都变成了简单操作的事情。2.考点考点1:单向链表的结构与基本节点格式;考点2:对于栈结构与递归关系的理解,以及两者与循环的区别理解;3.代码3.1 栈结构存储使用stack来从头到尾...原创 2019-07-11 09:49:24 · 120 阅读 · 0 评论 -
【剑指offer】面试题6前置 双向链表的实现
1.主旨这是对于面试题6中的单向链表的前置实验,本人参照所学的《数据结构(C++语言版)》对双向链表进行了大概实现(单向链表即不使用前继或者后继)。所用的链表实现方式为头尾哨兵节点法,通过两个哨兵位置的恒定性,拓展出双向链的结构形式。2.考点考点1:链表实现时的基本节点ListNode的结构形式(value值,前继后继);考点2:单向/双向链表的基本结构实现,如初始化与析构函数;考...原创 2019-07-10 22:03:07 · 246 阅读 · 0 评论 -
【剑指offer】面试题1 赋值运算符函数
1.主旨这道题主要是为了考察赋值运算符的重载,已经对于指针变量的拷贝时,其自身内存的管理(清理与查重)2.考点考点1:拷贝构造函数的标准格式:CMyString& 之类的标准引用(用于实现连续赋值,即保证返回的参数能作为输入的参数);考点2:拷贝构造函数的标准格式:(const CMyString& str)这样的常量引用传入参数,避免一次拷贝构造函数的调用;考点3:是...原创 2019-07-04 22:05:09 · 155 阅读 · 0 评论 -
【剑指offer】面试题5 替换空格
1.主旨这道题的关键是理解题意,书中作者明确说明了,这种类型的题目总会有就地/不就地处理模式,以及字符串长度管理的问题,而书中的假设是“进行就地处理,并且保证输入的字符串本身就具有足够的空间”。所以,对于此题的实现可以非常快速地定位到两种解决方案:从前往后的将空格变为%20,或者从后往前的将空格变为%20。2.考点考点1:注意审题:如果字符串本身的长度不够,那么就必须进行非就地处理,其...原创 2019-07-10 09:25:05 · 247 阅读 · 0 评论 -
【剑指offer】面试题4 二维数组中的查找
1.主旨理解二维数组的含义,比如数组是从0开始数的,储存方式是链式的矩阵(对于C++来说就是Vector包Vector),整体相对很简单,易于理解2.考点考点1:理解二维数组也是连续的空间,连续的编号对应的是连续的内存,可以快速访问;考点2:善于发现查找对应值的比较方式,比如从右上角/左下角来进行没有重复区间的范围缩小,同时注意可能题目变形,使之从左上/右下来计算3.代码方法...原创 2019-07-09 20:41:16 · 137 阅读 · 0 评论 -
【剑指offer】面试题3 数组中重复的数字
1.主旨考察数组本身的概念,以及在数组中实现对应数的查找。题目本身的含义很容易理解,所以对于这种简单的题目应该多从时间复杂度与空间复杂度这两个角度进行思考,这样才能体现出自己的思想优势。2.考点考点1:数组与指针的概念:数组占据着一块连续的内存储存数据,而指针是占着最小内存区间(通常为4B)的存储地址区间的变量。数组的名字为指向数组第一个元素的指针(比如a[2]就是从首元素向后移动三位...原创 2019-07-09 19:58:08 · 160 阅读 · 0 评论 -
【剑指offer】面试题63 六种买卖股票问题
本文结合剑指offer的63题与leecode上的六种买卖股票问题进行了总结,综合来说,就是需要不断地考虑在不同的条件下,dp[i][k][j]的产生条件,往往为前一位与前一位买卖的相关操作的最大值。1.第一种股票问题(单次买卖)动态规划实现第一类股票问题,单次买入卖出如果将最低收益设为0,那么初始值为0;如果考虑负收益 ,则初始值为INT_MIN思路1:动态规划,计算每个位置的...原创 2019-08-08 16:17:58 · 871 阅读 · 0 评论