剑指offer
Avada__Kedavra
这个作者很懒,什么都没留下…
展开
-
剑指offer 面试题3 数组中重复的数字
1.题意在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。示例:例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。2.思路思路1:“哈希表”实现从头到尾顺序扫描数组的每个数字,每扫描到一个数字的时候,都可以用的时间来...原创 2019-05-30 23:42:04 · 134 阅读 · 0 评论 -
剑指offer 面试题28 对称的二叉树
1.题目请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。2.思路首先根节点以及其左右子节点左子节点的左子树和右子节点的右子树相同左子节点的右子树和右子节点的左子树相同即可递归3.实现class Solution {public: bool isSymmetrical(TreeNod...原创 2019-06-20 22:47:17 · 99 阅读 · 0 评论 -
剑指offer 面试题30 包含min函数的栈
1.题目定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为)。2.思路只有一个栈肯定无法实现的时间复杂度弹出最小元素。可以添加一个辅助栈,每次新加入的数字比栈顶元素小就入辅助栈。栈弹出元素时,如果栈顶元素和辅助栈的栈顶元素相等,辅助栈弹出元素。3.实现class Solution {public: void...原创 2019-06-20 23:19:22 · 99 阅读 · 0 评论 -
剑指offer 面试题15 二进制中1的个数
1.题目输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。2.思路位运算考虑n - 1 1) 如果n最后一位是1,减一之后,最后一位变为0,其他数位不变。(1001 - 1 = 1000)2) 如果n最后一位不是1,如果该整数二进制表示中最右边的1位于第m位,减一之后,第m为由1变0,m位之后的所有0变为1。(1100 - 1 = 1011)综合前面...原创 2019-06-16 22:14:00 · 110 阅读 · 0 评论 -
剑指offer 面试题17:打印从1到最大的n位数
1.题目输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印1到999。2.思路2.1思路1n位所有十进制数其实就是n个从0到9的全排列。2.2思路2模拟字符串加法的操作。3.实现3.1 思路1的实现class Solution {public: void Print1ToMaxOfNDigits(int n) {...原创 2018-05-23 14:53:18 · 752 阅读 · 0 评论 -
剑指offer 面试题34 二叉树中和为某一值的路径
1.题目输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。2.思路是否存在一个累加为目标和的路径,我们可以把目标和(sum) 减去每个路径上节点的值,来进行递归。直到它到达叶节点并且差值等于0(sum == node->val 或者说 sum - node->val == 0...原创 2019-06-24 15:27:30 · 98 阅读 · 0 评论 -
剑指offer 面试题33 二叉搜索树的后序遍历序列
1.题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。2.思路BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列,递归判...原创 2019-06-24 23:02:07 · 94 阅读 · 0 评论 -
剑指offer 面试题35 复杂链表的复制
1.题目输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)2.思路1) 复制节点:遍历链表,复制每个结点,如复制结点A得到A1,将结点A1插到结点A后面; 2) 复制随机指针:遍历链表,A1->random =...原创 2019-06-24 23:30:21 · 92 阅读 · 0 评论 -
剑指offer 面试题27 二叉树的镜像(递归与非递归实现)
1.题目操作给定的二叉树,将其变换为源二叉树的镜像。示例二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...原创 2019-06-20 22:28:43 · 396 阅读 · 0 评论 -
剑指offer 面试题32 从上到下打印二叉树
1.题目从上到下打印二叉树2.思路实际上是二叉树的层级遍历,从上到下,从左到右。节点的访问次序可概括为“先上后下,先左后右”——先访问根节点,再依次是左子节点,右子节点,左子节点的左子节点,左子节点的右子节点,右子节点的左子节点,右子节点的右子节点……以此类推。3.实现class Solution {public: vector<int>...原创 2019-06-20 21:30:20 · 145 阅读 · 0 评论 -
剑指offer 面试题4 二维数组中的查找
1.题意在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。2.思路从矩阵的右上角开始搜索,假设右上角的数字为m,目标值为target,有如下三种情况:(1) m == target,查找成功,返回true;(2) m > ta...原创 2019-05-31 19:44:38 · 131 阅读 · 0 评论 -
剑指offer 面试题5 替换空格
1.题意请实现一个函数,将一个字符串中的每个空格替换成“%20”。示例:当字符串为“We Are Happy”,则经过替换之后的字符串为“We%20Are%20Happy”。2.思路顺序遍历字符串,统计字符串的总长度strLen和空格的个数numberOfBlank。替换后字符串的总长度为newLength = strLen+ 2 *numberOfBlank。从...原创 2019-05-31 20:40:26 · 105 阅读 · 0 评论 -
剑指offer 面试题6 从尾到头打印链表
1.题目输入一个链表,按链表值从尾到头的顺序返回一个Vector。2.思路2.1 思路1现将链表反转,然后在从头到尾输出。但这种方法会改变原来链表的结构。时间复杂度:空间复杂度:2.2 辅助栈遍历链表的顺序是从头到尾,输出的顺序是从尾到头。也就是说,第一个遍历到的节点最后一个输出,最后一个遍历到的节点第一个输出。这就是典型的“后进先出”,可以用栈实现这样的顺序...原创 2019-05-31 23:27:08 · 100 阅读 · 0 评论 -
剑指offer 面试题13 机器人的运动范围
1.题目地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?2.思路机器人从坐标(0,0)...原创 2019-06-12 22:26:45 · 192 阅读 · 0 评论 -
剑指offer 面试题12 矩阵中的路径
1.题目请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。例如 这样下图中的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第...原创 2019-06-06 23:16:53 · 176 阅读 · 0 评论 -
剑指offer 面试题22 链表中倒数第K个节点
1.题目输入一个链表,输出该链表中倒数第k个结点。2.思路ahead先走 (k - 1)步 (因为倒数第k个节点需要 k - 1步到达尾节点)ahead behind 同时开始, ahead走到尾节点时,behind走到倒数第k个节点。相对位置:*-*-*-*-*-*-*-*-*-*|k-1|*-*-*-*-*-*-*-*-*-* ...原创 2019-06-18 23:33:15 · 148 阅读 · 0 评论 -
剑指offer 面试题23 链表中环的入口节点
1.题目给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。2.思路首先 判断是否有环,使用“快慢指针法” 详见LeetCode 141. Linked List Cycle 有环链表接下来找到环的入口节点:假设x为环前面的路程(黑色路程),a为环入口到相遇点的路程(蓝色路程,假设顺时针走), c为环的长度(蓝色+橙色路程)当快慢指针相遇的...原创 2019-06-19 20:24:34 · 182 阅读 · 1 评论 -
剑指offer 面试题25 合并两个排序的链表
1.题目输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。2.思路1) 设置一个伪首节点 并且pre 指向这个节点2) p1 指向链表 1 p2 指向链表 23) pre指向 较小的节点。3.实现class Solution {public: ListNode* Merge(ListNode...原创 2019-06-19 21:52:01 · 108 阅读 · 0 评论 -
剑指offer 面试题26 树的子结构
1.题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)2.思路这个题主要分两步: 第一步是在以s为根节点的树中寻找和t相等的节点。 找到这个节点之后,判断以这两个节点为根节点的子树是否相同 没找到就继续寻找。3.题解class Solution {public: bool HasSu...原创 2019-06-19 22:17:19 · 104 阅读 · 0 评论 -
剑指offer 面试题7 重建二叉树
1.题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例:例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。2.思路二叉树的前序遍历序列中,第一个数字总是树的根节点的值。二叉树的中序遍历序列中,根节点的值在序列的中间,左子树节点...原创 2019-06-04 19:38:28 · 126 阅读 · 0 评论 -
剑指offer 面试题8 二叉树的下一个节点
1.题目给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。2.思路返回当前节点node在中序遍历的下一个节点,分为三种情况:如果node的右子树存在,那么node的下一个节点就是右子树的最左子节点; 如果node的右子树不存在,且这个节点是其父节点的左子节点,那么这个节点的下一个节点就是它的...原创 2019-06-04 21:17:48 · 109 阅读 · 0 评论 -
剑指offer 面试题9 用两个栈实现队列
1.题目用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。2.思路两个栈s1,s2操作先将元素存在s1中操作先判断s2是否为空s2为空,s1的元素逐个弹出并压入s2 s2不为空,s2的栈顶元素是最先进入队列的元素,s2.pop()3.实现class Solution{public: void push(in...原创 2019-06-04 21:40:50 · 117 阅读 · 1 评论