![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
EricLee23
无人驾驶决策与路径规划
展开
-
剑指Offer——数组中只出现一次的数字(C++)
1、题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)。2、解题思路:我们先来看一个比较简单的情况,如果数组中只有一个数字出现一次,其他都出现两次。那么我们应该可以想到异或运算。异或运算有一个比较好的性质是:相同为0,相异为1。也就是说,任何一个数字异或它自己都等于0,而0异或任何数都等于...原创 2020-04-28 18:54:29 · 296 阅读 · 0 评论 -
剑指offer-二叉树的深度(C++)
1、题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。2、解题思路利用递归自顶向下求解。代码如下:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v...原创 2020-04-29 19:05:49 · 139 阅读 · 0 评论 -
剑指offer-从上到下打印二叉树(C++)
1、题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。2、解题思路该问题本质为二叉树的层序遍历,使用队列实现代码如下:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), righ...原创 2020-04-29 19:05:57 · 163 阅读 · 0 评论 -
剑指offer-二叉树的下一个节点(C++)
1、题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。2、解题思路仔细观察,可以把中序下一结点归为几种类型:1、 有右子树,下一结点是右子树中的最左结点,例如 B,下一结点是 H2、 无右子树,且结点是该结点父结点的左子树,则下一结点是该结点的父结点,例如 H,下一结点是 E3、无右子树...原创 2020-04-29 19:06:05 · 164 阅读 · 0 评论 -
删除排序链表中的重复元素
1、题目描述2、解题思路代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {pub...原创 2020-04-29 19:06:38 · 112 阅读 · 0 评论 -
剑指offer-对称的二叉树(C++)
1、题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的2、解题思路自顶向下,递归的解决该问题,了解了对称二叉树就很容易解决该问题了。对称二叉树如下图所示:代码如下:/*struct TreeNode { int val; struct TreeNode *left; struct Tree...原创 2020-04-29 19:06:32 · 113 阅读 · 0 评论 -
剑指offer-链表中环的入口结点(C++)
1、题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null2、解题思路(1)解法11、这题我们可以采用双指针解法,一快一慢指针。快指针每次跑两个element,慢指针每次跑一个。如果存在一个圈,总有一天,快指针是能追上慢指针的。2、 如下图所示,我们先找到快慢指针相遇的点,p。我们再假设,环的入口在点q,从头节点到点q距离为A,q p两点间距离为B,p q...原创 2020-04-29 19:06:26 · 212 阅读 · 0 评论 -
剑指offer-栈的压入、弹出序列(C++)
1、题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)2、解题思路借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然...原创 2020-03-19 11:00:48 · 171 阅读 · 0 评论 -
剑指offer-包含min函数的栈(C++)
1、题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。2、解题思路定义两个栈stack1和min_stack,stack1用来存储数据,min_stack用来记录stack1的最小值,假设入栈序列为:4、5、6、3、2、1,那么min_sta...原创 2020-03-19 09:52:46 · 169 阅读 · 0 评论 -
剑指offer-链表中倒数第k个结点(C++)
1、题目描述输入一个链表,输出该链表中倒数第k个结点。2、解题思路使用两个指针,该两个指针间距k个节点,当后面的指针到达链表尾部时,另一个指针则指向倒数第k个节点。代码如下:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/...原创 2020-03-18 22:28:01 · 99 阅读 · 0 评论 -
剑指offer-重建二叉树(C++)
1、题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。链接:https://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f6ea9b0f6f...原创 2020-03-17 21:18:30 · 150 阅读 · 0 评论 -
剑指offer-斐波那契数列(C++)
1、最简单,容易理解的方法斐波那契数列的标准公式为:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)class Solution {public: int Fibonacci(int n) { if (n <= 1) return n; return Fibonacci(n...原创 2020-03-17 19:04:24 · 163 阅读 · 0 评论 -
剑指offer-矩形覆盖(C++)
1、题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2×1的小矩形无重叠地覆盖一个2×n的大矩形,总共有多少种方法?比如n=3时,2×3的矩形块有3种覆盖方法:2、解题思路本题的本质还是斐波那契数列的问题。最后一次的小矩形有以下两种情况:第一种:最后一块竖着放,那么前面n-1块有f(n-1)种放法。第二种:最后一块横着放,那么n-1块也随之确定,在第n块的上...原创 2020-03-17 18:02:27 · 186 阅读 · 0 评论 -
剑指offer-二进制中1的个数(C++)
1、题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。2、解题思路搬运一个大佬的解题思路如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后...原创 2020-03-17 14:57:31 · 94 阅读 · 0 评论 -
剑指offer-跳楼梯和变态跳楼梯(C++)
1、普通跳楼梯1、题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。2、解题思路该题本质上是斐波那契数列,从第n阶台阶考虑,从n-1阶向上跳一阶可以到达第n阶,从第n-2阶向上跳两阶可以到达第n阶,所以得到递归表达式:f(n)=f(n-1)+f(n-2)代码如下:class Solution {publi...原创 2020-03-17 14:25:31 · 409 阅读 · 0 评论 -
剑指offer-二叉树的镜像(C++)
1、题目描述操作给定的二叉树,将其变换为源二叉树的镜像。2、解题思路利用递归的思想,依次交换根节点的左、右孩子节点。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { ...原创 2020-03-17 13:00:13 · 130 阅读 · 0 评论 -
剑指offer-树的子结构(C++)
1、题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)2、解题思路要查找树A是否存在和树B结构一样的子树,我们可以分成两步:第一步在树A中找到和树B的根节点的值一样的节点R,第二步再判断树A中以R为根节点的子树是不是包含和树B一样的结构。/*struct TreeNode { int val; struct TreeNode *le...原创 2020-03-17 12:43:12 · 136 阅读 · 0 评论