自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 【剑指offer】数的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路举个例子,如图。可以知道 B 树是 A 树的子结构。在判断的过程中,可以分为两步。第一步,在 A 树中找到和 B 树的根结点值一样的结点 R;第二步,判断 A 树中以结点 R 为根的子树是不是包含了 B 树,即左右结点 (左右子树) 和 B 树一样。第一步,要在 A 树中找到和 B...

2020-02-14 16:17:27 156

原创 【剑指offer】反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。解题思路举个例子。假设原链表为:1 → 2 → 3 → 4 → 5。要求反转链表,我们取结点 3 来看,就需要把 3 的 next 指向 2,所以这时至少需要两个 ListNode 指针,一个指向结点 2,另一个指向结点 3。因为要将结点 3 的 next 指针修改为指向结点 2,如果就这么直接地操作,我们会丢失结点 4 及其以后的结...

2020-02-14 16:16:41 192

原创 【剑指offer】链表中倒数第 k 个结点

题目描述输入一个链表,输出该链表中倒数第 k 个结点。解题思路思路一:这个思路比较简单粗暴,因为要找倒数第 k 个结点,可以利用栈“先进后出”的特性,首先,遍历链表所有的结点,存储到栈内;然后将栈内前 k-1 个结点推出来,那么剩下的栈顶结点就是倒数第 k 个结点。这个方法的空间复杂度是 O(n),时间复杂度 O(n)。实现代码:/*struct ListNode { int ...

2020-02-14 16:15:35 174

原创 【剑指offer】合并两个排序链表

题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路思路一:创建一个新的链表,一起遍历链表 1 和链表 2,哪个值小,就插入到新链表中。实现代码(下面的精简代码更清晰,这个有点冗杂了):/*struct ListNode { int val; struct ListNode *next; ListNode(int x)...

2020-02-14 16:13:31 154

原创 【剑指offer】二叉搜索树的第k个结点

题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如,(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。解题思路首先,二叉搜索树有一个很好的特性,任意一个结点必大于其左子树的所有结点,必小于等于其右子树的所有结点。如果使用中序遍历二叉搜索树,那么结果会按数值从小到大的顺序输出。<图>例如上图就是一棵二叉搜索树。中序遍历上图的二叉搜索树,输出结果...

2020-02-07 18:07:13 183

原创 【剑指offer】把二叉树打印成多行

题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。解题思路这道题的题意很简单,就是层次遍历(BFS),输出结果。按照上图的二叉树,简单分析一下层次遍历的过程。将结点 8 放入队列中。取出队列头结点 8,输出。判断结点 8 是否存在左右结点,存在,将结点 3 和 10 放入队列中。取出队列头结点 3,输出,再判断是否存在左右结点,存在,将结点 1 和 6...

2020-02-07 18:05:53 114

原创 【剑指offer】重建二叉树

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路给出遍历序列唯一确定二叉树有两种方式:前序遍历 + 中序遍历后序遍历 + 中序遍历这道题中给出了前序遍历序列和中序遍历序列,要求...

2020-02-07 18:04:45 90

原创 【剑指offer】对称的二叉树

题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路思路一:递归要判断二叉树是否为对称的,就要获得树的每个结点,而要遍历树的结点,比较简单的方式是递归,所以采用递归的思路。要实现递归算法,就要找到递归的两要素,分别是边界条件(结束递归的条件)和递归公式。考虑我们自己是怎么进行判断的。给定根结点的左结点 pL ...

2020-02-06 20:26:02 147

原创 【剑指offer】二叉树的下一个结点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解题思路首先,简单回顾一下二叉树的三种遍历。前序遍历:根->左->右中序遍历:左->根->右后序遍历:左->右->根题目要求找出给定结点 pNode 中序遍历的下一个结点。分析这道题最好的办法是结合图。下...

2020-02-06 20:24:30 127

原创 【剑指offer】数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0解题思路这道题主要考查两点:第一,考虑了所有可能情况;第二,幂运算。首先是所有可能情况,这跟平常做数学题的分类讨论一样。有什么可能的情况呢?幂函数需要考虑的是幂系数 (exponent) 小于 0,等于 0 和大于 0 三种情况...

2020-02-06 20:23:00 116

原创 【剑指offer】调整数组顺序使奇数位于偶数前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路要求保证奇数和奇数,偶数和偶数之间的相对位置不变,保持稳定性,在排序算法中具有稳定性的算法不多,如插入排序、归并排序等。按照要求只能依次移动交换或者相邻交换。思路一:使用插入排序利用插入排序的思想,记下...

2020-02-06 20:22:02 244

原创 【剑指offer】旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路分析题目的几个特点:(1) 数组非递减(2) 旋转数组只是简单地将前面若干个元素搬到数组末尾...

2020-02-05 19:39:27 99

原创 【剑指offer】从尾到头打印链表

题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路换句话说,题目要求从尾到头输出链表,遍历链表是少不了的。但是遍历链表是从头到尾的,怎么才能从尾到头呢?思路一:有一个小 trick,利用返回的 ArrayList 是 vector 的属性,c++ 的 vector 插入操作可以指定插入位置,假如我们在遍历链表的过程中,每次将链表数据插入到 ArrayLis...

2020-02-05 19:37:39 116

原创 【剑指offer】删除链表中重复的结点

题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。解题思路这道题要注意读题,是删除重复结点,而不是去重。一开始,我迷糊了,完成的代码是去重的,怎么都不能通过,觉得很奇怪,看了讨论区才意识到自己的错误。删除重复结...

2020-02-05 19:36:34 124

原创 【剑指offer】链表中环的入口结点

题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解题思路给定一个单链表,判断其中是否有环,是一个比较经典的问题。简单归纳一下,单链表中环的问题包括:判断其中是否有环的存在;如果存在环,找出环的入口点;如果存在环,求出环上节点的个数;如果存在环,求出链表的长度;如果存在环,求出环中距离任意一个节点最远的点(对面节点);(扩展)如何判断两个无环...

2020-02-05 19:35:21 148

原创 【剑指offer】变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路借鉴牛客网上用户名为dangle的朋友的分析方法。分析如下:用 f(i) 表示跳上 i 个台阶总共有的跳法总数,当只需跳上 1 个台阶时,可以表示为 f(1) = f(1-1) = 1,其中 f(1-1) 表示登上 1 级台阶,一次跳 1 个台阶的次数;同样地,...

2020-02-04 12:17:59 152

原创 【剑指offer】跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路用 f(i) 表示跳上 i 个台阶总共有的跳法总数,f(i-1) 和 f(i-2) 分别表示第一次跳是 1 级台阶和跳上 2 级台阶之后剩下的台阶数含有的跳法总数,那么我们也就知道,青蛙要跳上 n 级台阶,其递归式可以写为 f(n) = f(n-1) + ...

2020-02-04 12:16:52 110

原创 【剑指offer】矩形覆盖

题目描述我们可以用 2×12\times 12×1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 nnn 个 2×12\times 12×1 的小矩形无重叠地覆盖一个 2×n2\times n2×n 的大矩形,总共有多少种方法?解题思路这道题的实质也是斐波那契数列。从题目中可以知道,当 n≥2n\geq 2n≥2时,小矩形其实只有两种覆盖方法,第一种是竖着,此时小矩形的宽等于大矩形的宽,...

2020-02-04 12:16:08 133

原创 【剑指offer】斐波那契数列

题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39下面首先会简单介绍递归算法,然后给出递归算法的解法代码,以及使用非递归算法的解决代码,最后是简单使用动态规划的方法解决。递归算法斐波那契数列是典型的递归代表。递归算法的核心在于两点:结束递归的边界条件递归公式递归公式简单理解起来,就是类似于我们高中数学...

2020-02-04 12:14:45 618

原创 【剑指offer】二进制中 1 的个数

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路这一道题考查的是位运算。首先,简单回顾一下位运算具有的 6 种运算法则:与、或、异或、取反、左移和右移。符号描述运算规则&与两个位都为1时,结果才为1|或两个位都为0时,结果才为0^异或两个位相同为0,相异为1~取反0变1,1变0<...

2020-02-04 12:13:47 98

原创 【剑指offer】数组中重复的数字

题目描述在一个长度为n的数组里的所有数字都在 0 到 n-1 的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为 7 的数组 {2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字 2。解题思路从题目里可以找到 2 点关键信息:数字范围在 [0, n-1] 区间内;只需找到其中一...

2020-02-03 18:07:47 95

原创 【剑指offer】构建乘积数组

题目描述给定一个数组 A[0,1,...,n−1]A[0,1,...,n-1]A[0,1,...,n−1],请构建一个数组 B[0,1,...,n−1]B[0,1,...,n-1]B[0,1,...,n−1],其中 BBB 中的元素 B[i]=A[0]∗A[1]∗...∗A[i−1]∗A[i+1]∗...∗A[n−1]B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A...

2020-02-03 17:54:11 103

原创 【剑指offer】二维数组中的查找

题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路这个二维数组有很好的结构,简单画个图。思路一: 二分查找二分查找(折半查找)要求待查找的表/数组满足两个条件:(1) 查找表/数组必须使用顺序的存储结构;(2) 查找表/数组...

2020-02-03 17:51:28 85

原创 【剑指offer】正则表达式匹配

题目描述请实现一个函数用来匹配包括 ‘.’ 和 ‘*’ 的正则表达式。模式中的字符 '.'表示任意一个字符,而 ‘*’ 表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串 “aaa” 与模式 “a.a” 和 “ab*ac*a” 匹配,但是与 “aa.a” 和 “ab*a” 均不匹配。解题思路首先,考虑一般情况。由题目可以知道,正则表...

2020-01-22 21:45:49 139

原创 【剑指offer】字符流中第一个不重复的字符

题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。如果当前字符流没有存在出现一次的字符,返回#字符。解题思路方法1:最简单的想法,用字符串str记录字符流中的每一个字符ch,同时利用一个数组hash记录每一个字符ch...

2020-01-16 21:05:22 231

原创 【矩阵学习】Jacobian矩阵和Hessian矩阵

【矩阵学习】Jacobian矩阵和Hessian矩阵Jacobian 矩阵Jacobian 行列式功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchar...

2019-03-12 16:15:46 6752

原创 【LeetCode】TwoSum - 求数组中两个数之和等于指定目标的加数下标

【LeetCode】TwoSum-求数组中两个数之和等于指定目标的加数下标TwoSum 题目描述 Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input wou...

2018-08-05 11:36:25 1715

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除