剑指offer
jialun0116
浙江工业大学
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
124. 二叉树中的最大路径和
124. 二叉树中的最大路径和知识点:二叉树题目链接题目描述路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例 1:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:输入:roo原创 2021-05-10 20:52:48 · 324 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组
剑指 Offer 66. 构建乘积数组知识点:数组题目链接题目描述给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 100000解题思路原创 2021-05-10 10:43:01 · 112 阅读 · 0 评论 -
剑指 Offer 60. n个骰子的点数
剑指 Offer 60. n个骰子的点数知识点:动态规划题目链接题目描述把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例 2:输入: 2输出: [0.02778,0.05556,0.08333,0.11原创 2021-05-09 17:39:24 · 109 阅读 · 0 评论 -
剑指 Offer 56 - II. 数组中数字出现的次数 II
剑指 Offer 56 - II. 数组中数字出现的次数 II知识点:位运算题目链接题目描述在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1限制:1 <= nums.length <= 100001 <= nums[i] < 231解题思路参考前面一题 可以用位运算解决其他原创 2021-05-08 12:24:15 · 126 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串
3. 无重复字符的最长子串知识点:滑动窗口时间:2021年4月13日题目链接题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入:s = “abcabcbb”输出:3解释:因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入:s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长原创 2021-04-13 10:00:45 · 160 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串
剑指 Offer 46. 把数字翻译成字符串知识点:动态规划题目链接题目描述给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”提示:0 <= num &原创 2021-05-06 08:01:58 · 104 阅读 · 0 评论 -
剑指 Offer 44. 数字序列中某一位的数字
剑指 Offer 44. 数字序列中某一位的数字知识点:数学题目链接题目描述数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。示例 1:输入:n = 3输出:3示例 2:输入:n = 11输出:0限制:0 <= n < 231解题思路我们知道一位数有9个 每个数1位 两位数有90个 每个数2位所以我们可以先判断第n原创 2021-05-06 07:28:29 · 102 阅读 · 0 评论 -
JZ39 数组中出现次数超过一半的数字
JZ_39 数组中出现次数超过一半的数字知识点:哈希表、排序、摩尔投票题目链接题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000解题思路哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量,即可找出 众数 。此方法时间和空间复杂度均为 O(N) 。原创 2021-04-28 13:06:48 · 135 阅读 · 0 评论 -
JZ37 序列化二叉树
剑指 Offer 37. 序列化二叉树知识点:二叉树、bfs、dfs时间:2020年4月26日题目链接题目请实现两个函数,分别用来序列化和反序列化二叉树。示例:你可以将以下二叉树: 1 / \ 2 3 / \ 4 5序列化为 “[1,2,3,null,null,4,5]”代码#include "cheader.h"struct TreeNode { int val; TreeNode *left; TreeNode原创 2021-04-26 12:17:46 · 183 阅读 · 0 评论 -
Leetcode刷题笔记 剑指 Offer 20. 表示数值的字符串
剑指 Offer 20. 表示数值的字符串时间:2020年9月2日知识点:字符串题目链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/题目请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。代码#i原创 2020-09-02 20:36:43 · 339 阅读 · 0 评论 -
剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数知识点:大数、全排列时间:2020年4月21日题目链接题目输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数解法:这题不需要考虑大数的问题 可以暴力求解当考虑到大数问题时 其实就是数的全排序 这里可以用递归回溯的方法需要特判一个0原创 2021-04-21 20:07:39 · 125 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径
剑指 Offer 12. 矩阵中的路径知识点:回溯、dfs时间:2021年4月16日题目链接题目给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例 1:输入:bo原创 2021-04-16 10:56:47 · 121 阅读 · 0 评论 -
Leetcode热题 10. 正则表达式匹配
10. 正则表达式匹配知识点:动态规划时间:2021年4月13日题目链接题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa” p = “a”输出:false解释:“a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa” p = “a*”输出:true解释:因为原创 2021-04-13 14:10:14 · 122 阅读 · 0 评论 -
JZ67_剪绳子
JZ67_剪绳子知识点:动态规划题目链接题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入一个数n(2 <= n <= 60)输入: 8输出: 18解题思路当绳子长度为2、3时很好判断当大于等于4时,可以把左边的当作一段,原创 2021-04-08 10:28:34 · 153 阅读 · 0 评论 -
JZ64_滑动窗口的最大值
JZ64_滑动窗口的最大值知识点:队列题目链接题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3原创 2021-04-07 16:08:39 · 139 阅读 · 0 评论 -
JZ63_数据流中的中位数
JZ63_数据流中的中位数知识点:最大最小堆题目链接题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。解题思路这里要求中位数,最笨的方法就是放入数组中排序如果是奇数个,我们希望能快速拿到中间的;偶数个,希望拿到前面部分最大的,后面部分最小的;由此我们想到最原创 2021-04-07 11:00:36 · 250 阅读 · 0 评论 -
JZ62_二叉搜索树的第k个结点
JZ62_二叉搜索树的第k个结点知识点:二叉树题目链接题目描述给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。输入: {5,3,7,2,4,6,8},3输出: {4}解释: 按结点数值大小顺序第三小结点的值为4解题思路这里有两种解法:递归和非递归我们知道这是一颗二叉搜索树,中序遍历的结果是有序的,最简单的就是中序遍历放入数组中,这里就不在赘述对于递归的方法:我们需要定义答案结点和比较次数,注意返回条件:如果结点为空就返回;递归顺序:中序;我们需要对根这部分操作,比较次数原创 2021-04-07 10:11:49 · 123 阅读 · 0 评论 -
NC17_最长回文子串
NC17_最长回文子串知识点:动态规划题目链接题目描述对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。输入: “abc1234321ab”,12输出: 7解题思路令dp[i][j]表示A[i]至A[j]所表示的子串是否是回文子串若A[i] = A[j],那么只要A[i+1]和A[j-1]是回文子串,A[i+1]至A[j-1]就是回文子串;若A[i] != A[j],那A[i]至A[j]一定不是回文子串。转移方程为原创 2021-03-17 19:11:14 · 708 阅读 · 0 评论 -
JZ57_二叉树的下一个结点
JZ57_二叉树的下一个结点知识点:二叉树题目链接题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。输入: {1,2,3,3,4,4,5}输出: {1,2,5}解题思路情况1 情况1 情况3 情况2 2 3 1 1 \ \ / / x原创 2021-03-17 10:47:40 · 128 阅读 · 0 评论 -
JZ56_删除链表中重复的结点
JZ56_删除链表中重复的结点知识点:链表题目链接题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5输入: {1,2,3,3,4,4,5}输出: {1,2,5}解题思路直接取出链表中的结点 然后去重再组成链表比较简单在原来的基础上修改 pre指针指向当前已经确定的不重复的结点 cur一直往后遍历 如果重复的跳过原创 2021-03-16 15:58:55 · 166 阅读 · 0 评论 -
JZ52_正则表达式匹配
JZ52_正则表达式匹配知识点:字符串、基础范围题目链接题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。输入: “aaa”,“a*a”输出: true解题思路采用递归的方法返回的条件是 如果str和pattern同时走到底 说明匹配成功 若pattern先到底 str没到底 那么匹配不原创 2021-03-15 12:48:07 · 188 阅读 · 0 评论 -
JZ49_把字符串转换成整数
JZ49_把字符串转换成整数知识点:字符串、基础范围题目链接题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空返回值描述:如果是合法的数值表达则返回该数字,否则返回0输入: “+2147483647”输出: 2147483647解题思路int的范围是 [231 -1 , -231]首先判断这个数的正负,如果正数,超过了INT_MAX,就设置为INT_MAX如果原创 2021-03-15 10:52:55 · 120 阅读 · 0 评论 -
JZ48_不用加减乘除做加法
JZ48_不用加减乘除做加法知识点:异或、与、位运算题目链接题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。输入: 1,2输出: 3解题思路这里用到异或运算和 与运算 和 左移举例 当 二进制101 和 111相加时101 ^ 111 = 010 (没有处理进位的加法)(101 & 111) << 1 = 101 << 1 = 1010 (此处得到哪一位需要加上进位,为1的地方表示有进位需要加上) 0010原创 2021-03-12 13:50:09 · 205 阅读 · 0 评论 -
JZ46_孩子们的游戏
JZ46_孩子们的游戏知识点:约瑟夫环题目链接题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏原创 2021-03-12 12:13:10 · 199 阅读 · 0 评论 -
JZ41_和为S的连续正数序列
JZ41_和为S的连续正数序列知识点:滑动窗口题目链接题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!返回值描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大原创 2021-03-11 18:26:07 · 135 阅读 · 0 评论 -
JZ40_数组中只出现一次的数字
JZ40_数组中只出现一次的数字知识点:哈希表、位运算题目链接题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。输入: [1,4,1,6]输出: [4,6]解题思路用哈希表存每个数字 和 对应的次数 然后找到次数等于1的数字用位运算 我们知道 1^1 =0 0^0=0 1^0=1 如果两个相同的数 异或则为0所以所有的数异或 得到的结果是 那两个只出现一次数 异或的结果知道异或结果中 第一次出现1的位置 我们就能分开这个数 然后去原创 2021-03-11 16:21:45 · 156 阅读 · 0 评论 -
Z36_两个链表的第一个公共节点
Z36_两个链表的第一个公共节点知识点:链表、双指针题目链接题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)解题思路理解题目的意思pHead1 1->2->4->10->3->nullpHead2 3->10->3第一个公共节点是10可以把这些点放入哈希表中 再去找用两个指针分别遍历 两个链表 两个链表再处理一下 pHead1 = pHead1 + pH原创 2021-03-10 13:22:46 · 139 阅读 · 0 评论 -
JZ34_数组中的逆序对
JZ34_数组中的逆序对知识点:归并排序题目链接题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字示例1输入: {1,2,3,4,5,6,7,0}输出: 7解题思路这里采用归并的思想 首先要知道归并的框架 类似于树的后序遍历 先递归进行左子树 和 右子树 然后左右子树变成有序me原创 2021-03-09 14:57:39 · 206 阅读 · 0 评论 -
JZ33_丑数
JZ33_丑数知识点:动态规划、数组题目链接题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。示例1输入: 7输出: 8解题思路根据定义我们可以知道什么是丑数num = 2x x 3y x 5z丑数可以由 一个丑数乘以2或者乘以3或者乘以5得到从1开始 得到 2,3,5 ;再从2,3,5开始 得到4,6,10,6,9,15,10,15,25原创 2021-03-09 14:09:20 · 196 阅读 · 0 评论 -
JZ32_把数组排成最小的数
JZ32_把数组排成最小的数知识点:自定义函数 string题目链接题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。示例1输入:[3,32,321]输出: “321323”解题思路to_string 函数可以把int类型转为string类型这里定义一个比较函数 对 string类型的数据排序 希望越小越好 a+b < b+a再把他们放回来 组原创 2021-03-09 12:59:06 · 183 阅读 · 0 评论 -
NC50_链表中的结点每k个一组翻转
NC50_链表中的结点每k个一组翻转知识点:链表题目链接题目描述将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。要求空间复杂度O(1)例如:给定的链表是1→2→3→4→5对于 k=2, 你应该返回=2→1→4→3→5对于 k=3, 你应该返回=3→2→1→4→5示例1输入:{1,2,3,4,5},2输出:{2,1,4,3,5}解题思路方法一:定义一个哨兵结点 插入链原创 2021-03-09 11:58:52 · 273 阅读 · 0 评论 -
JZ31_整数中1出现的次数(从1到n整数中1出现的次数
JZ31_整数中1出现的次数(从1到n整数中1出现的次数知识点:找规律题目链接题目描述求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。示例1输入: 13返回值: 6解题思路用high表示高位,cur表示当前位,low表示低位,di原创 2021-03-08 15:47:49 · 207 阅读 · 0 评论 -
JZ27_字符串的排列
JZ24_字符串的排列知识点:递归、全排列题目链接题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。示例1输入:“ab”返回值: [“ab”,“ba”]解题思路方法一 :每次找下一个全排列和Leetcode刷题笔记 31. 下一个排列一样的思路首先从尾向头找 str[i] &原创 2021-03-08 13:48:35 · 247 阅读 · 0 评论 -
ZJ26_二叉搜索树与双向链表
ZJ26_二叉搜索树与双向链表知识点:二叉树、链表、分治题目链接题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路采用中序遍历 把结点都放入一个数组中保存 然后再把他们连起来不用数组 用一个pre结点保存前一个结点 直接在中序遍历 把他们连起来代码#include "cheader.h" struct TreeNode { int val; struct TreeNode *left;原创 2021-03-07 12:10:21 · 152 阅读 · 0 评论 -
JZ25_复杂链表的复制
JZ25_复杂链表的复制知识点:链表题目链接题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空解题思路复制next 如原来是A->B->C->D 变成A->A’->B->B’->C->C’->D->D’复制random 添加random指针 若原原创 2021-03-07 10:48:33 · 192 阅读 · 0 评论 -
JZ24_二叉树中和为某一值的路径
JZ24_二叉树中和为某一值的路径知识点:二叉树题目链接题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。示例1输入: {10,5,12,4,7},22返回值: [[10,5,7],[10,12]]示例2输入: {10,5,12,4,7},15返回值: [ ]解题思路解决这道题 我们要知道如何遍历所有从根到叶子结点的路径第一 传入的参数 和 返回值 传入最后结果数原创 2021-03-07 10:12:47 · 164 阅读 · 0 评论 -
JZ23_二叉树的后序遍历
JZ23_二叉树的后序遍历知识点:二叉树题目链接题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。示例1输入:[4,8,6,12,16,14,10]返回值: true解题思路首先我们明白 后序遍历是 左 右 根后序遍历的结果 最后的一定是根 这样我们就可以找到左右子树我们采用递归的方式 明确三点第一 递归的参数 我们需要知道数组是什么 数组的哪些范围内 需要我们判断第二 返回的原创 2021-03-06 23:08:42 · 140 阅读 · 0 评论 -
JZ21_栈的压入、弹出序列
JZ21_栈的压入、弹出序列知识点:栈题目链接题目描述操作给定的二叉树,将其变换为源二叉树的镜像。示例1输入:[1,2,3,4,5],[4,3,5,1,2]返回值: false解题思路看起来比较简单 但是实际做的时候没啥思路首先定义两个指针i,j 分别指向 push 和 pop移动指针,如果指针i和j对应的数不一样,就把i对应的压入栈,如果一样,说明这个数可以直接放进弹出,两个指针都++,然后判断pop顺序中的数,有可能来自栈中元素的弹出,也可能来自下个放入,所以这里尽可能的匹配原创 2021-03-06 16:32:02 · 155 阅读 · 0 评论 -
JZ18_二叉树的镜像
JZ18_二叉树的镜像 知识点:二叉树题目链接题目描述操作给定的二叉树,将其变换为源二叉树的镜像。比如: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5示例1输入:原创 2021-03-05 23:13:09 · 1387 阅读 · 0 评论 -
JZ17_树的子结构
JZ17_树的子结构 知识点:二叉树题目链接题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)示例1输入: {8,8,#,9,#,2,#,5},{8,9,#,2}返回值: true解题思路这是由两个小问题组成的一道题首先我们要判断一棵树是否和另一棵树有相同结构,这里需要用到递归递归中最重要的是返回条件:如果B为空 则返回true;如果A为空 B不为空 则返回false;如果A树的结点值 == B树的结点值,两个树左子树和右子树 递归进原创 2021-03-05 10:49:50 · 198 阅读 · 0 评论
分享