剑指offer
文章平均质量分 58
无
TABE_
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2021-4-27 剑指 Offer 22. 链表中倒数第k个节点(遍历,快慢指针)
注:题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.题解:方法一 遍历算法思路先遍历统计链表长度,记为 n ;设置一个指针走 (n-k)步,即可找到链表倒数第 k 个原创 2021-04-27 11:16:16 · 147 阅读 · 0 评论 -
2021-4-20剑指 Offer 12. 矩阵中的路径(深度优先搜索)
注:题目:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例 1:输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A原创 2021-04-20 10:55:40 · 366 阅读 · 0 评论 -
2021-05-29 剑指 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.11111,0.13889,0.16667,0.13889,0.111原创 2021-05-29 17:37:41 · 252 阅读 · 0 评论 -
2021-5-17 剑指 Offer 48. 最长不含重复字符的子字符串(动态规划,滑动窗口)
注:题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,原创 2021-05-17 15:03:01 · 224 阅读 · 0 评论 -
2021-4-22 剑指 Offer 14- II. 剪绳子 II(贪心算法)
注:1.若res为int类型,则会溢出,因此res应为longlong类型。2.函数返回值为int类型,需要进行一次longlong->int的类型转换。题目:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取原创 2021-04-23 10:27:41 · 166 阅读 · 0 评论 -
2021-4-19 剑指 Offer 11. 旋转数组的最小数字(二分搜索)
注:为什么忽略左边,是mid + 1,而忽略右边是mid?假如mid位置恰好是最小值,右边要是mid-1的话就错过了最小值,而左边的话mid处比high大,已经确定mid不是最小值的位置,如果mid+1是最小值的位置,也不会影响最终结果。题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2原创 2021-04-19 10:31:44 · 143 阅读 · 0 评论 -
2021-5-20 剑指 Offer 52. 两个链表的第一个公共节点(双指针)
注:题目:输入两个链表,找出它们的第一个公共节点。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节原创 2021-05-20 10:16:19 · 129 阅读 · 0 评论 -
2021-4-24 剑指 Offer 16. 数值的整数次方(位操作快速幂)
注:若n是一个int型,则-2^31 <= n <= 2^31-1即-n可能会溢出,需要把-n储存在long型中题目:实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3:输入:x = 2.00000, n = -2输出:0.25000解释:2-2 =原创 2021-04-24 16:13:15 · 228 阅读 · 0 评论 -
2021-5-15 剑指 Offer 46. 把数字翻译成字符串(动态规划及其优化)
注:题目:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”提示:0 <= num < 231题解:方法一 动态规划解题思路:根据题意,可按照原创 2021-05-15 17:36:47 · 182 阅读 · 0 评论 -
2021-5-14 剑指 Offer 45. 把数组排成最小的数(快速排序,自定义sort)
注:题目:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: “102”示例 2:输入: [3,30,34,5,9]输出: “3033459”提示:0 < nums.length <= 100说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数.拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0.题解:方法一 快速排序解题思路:此题求拼接起来的最小数字,本质上是一个排原创 2021-05-14 11:21:56 · 372 阅读 · 0 评论 -
2021-4-29 剑指 Offer 26. 树的子结构(dfs,bfs)
注:如需要左右子树同时满足一定条件,则递归函数需要带返回值,用left&&right来保证左子树和右子树都满足条件。题目:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:原创 2021-04-29 11:29:26 · 149 阅读 · 0 评论 -
2021-5-4剑指 Offer 32 - III. 从上到下打印二叉树 III(宽度优先搜索,双端队列)
注:题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [20,9], [15,7]]提示:节点总数 <= 1000题解:利用 deque 这个 STL 数据容器,维护一个双端队列。原创 2021-05-04 15:47:39 · 130 阅读 · 0 评论 -
2021-5-6 剑指 Offer 34. 二叉树中和为某一值的路径(回溯算法)
注: if(root->left==nullptr&&root->right==nullptr&&count==target){ result.push_back(nums); //这里不可以加return,不然会导致少进行一个nums.pop_back() }题目:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节原创 2021-05-06 17:00:45 · 201 阅读 · 0 评论 -
2021-5-28 剑指 Offer 58 - II. 左旋转字符串(原地修改)
注:题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”限制:1 <= k < s.length <= 10000题解:不使用内置函数原创 2021-05-28 16:18:33 · 155 阅读 · 0 评论 -
2021-5-2 剑指 Offer 30. 包含min函数的栈(辅助栈)
注:题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3),原创 2021-05-02 16:38:58 · 178 阅读 · 0 评论 -
2021-5-19 剑指 Offer 50. 第一个只出现一次的字符(哈希表,队列)
注:unordered_map里的元素排列顺序是按照进入map的顺序排列的,而map里面的元素会自动根据key被排序。题目:在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例:s = “abaccdeff”返回 “b”s = “”返回 " "限制:0 <= s 的长度 <= 50000题解:方法一:使用哈希表存储频数思路与算法我们可以对字符串进行两次遍历。在第一次遍历时,我们使用哈希映射统计出字符串中每个字符出现的次数。原创 2021-05-19 15:58:19 · 176 阅读 · 0 评论 -
2021-4-30 剑指 Offer 28. 对称的二叉树(有返回值的递归)
注:题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:ro原创 2021-04-30 15:05:50 · 162 阅读 · 1 评论 -
2021-4-28 剑指 Offer 25. 合并两个排序的链表(伪头节点)
注:题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000题解:解题思路根据题目描述, 链表 l1, l2 是 递增 的,因此容易想到使用双指针l1和 l2遍历两链表,根据 l 1.val 和 l2.val 的大小关系确定节点添加顺序,两节点指针交替前进,直至遍历完毕。引入原创 2021-04-28 14:38:22 · 131 阅读 · 0 评论 -
2021-4-18 剑指 Offer 10- I. 斐波那契数列(递归,动态规划)
注:题目:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出原创 2021-04-18 14:12:02 · 179 阅读 · 0 评论 -
2021-5-2 剑指 Offer 31. 栈的压入、弹出序列(辅助栈)
注:题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3),原创 2021-05-02 17:42:34 · 286 阅读 · 0 评论 -
2021-5-5 剑指 Offer 33. 二叉搜索树的后序遍历序列(递归分治,辅助单调栈)
注: //这种写法不对,因为1、当mid=left时,无法判断是否进行了postorder[i]>root的判断 //2、当没有右子树时,这种写法没办法准确判断出右结点的位置,如输入[1,2,3,4,5] /*for(int i=left;i<right;i++){ if(postorder[i]>root){ mid=i; break;原创 2021-05-06 11:40:21 · 507 阅读 · 0 评论 -
2021-6-2 剑指 Offer 67. 把字符串转换成整数(整数边界)
注:**c[j] > ‘7’ 这里处理很巧妙,判断 > ‘7’ , 看似没有考虑 MIN, 但其实无论是 = ‘8’ ,还是 >‘8’,返回的都是MIN。 **题目:写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字原创 2021-06-02 16:33:32 · 218 阅读 · 0 评论 -
2021-6-1 剑指 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题解:方法一:左右数组使用两个数组 L和R,L[i]表示a[i]左边的原创 2021-06-01 11:37:18 · 186 阅读 · 0 评论 -
2021-5-8 剑指 Offer 36. 二叉搜索树与双向链表(中序遍历)
注:中序遍历二叉搜索树,就可以 “从小到大”访问树的节点。题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们原创 2021-05-08 10:43:58 · 198 阅读 · 0 评论 -
2021-4-26 剑指 Offer 20. 表示数值的字符串(有限状态机)
注:枚举类型的使用有限状态机题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)下述格式之一:至少一位数字,后面跟着一个点 ‘.’至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字一个点 ‘.’ ,后面跟着至少一位数字整数(按顺序)可以分成以下几个原创 2021-04-26 15:25:50 · 154 阅读 · 0 评论 -
2021-5-24 剑指 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] < 2^31题解:解题思路:如下图所示,考虑原创 2021-05-25 15:05:17 · 256 阅读 · 0 评论 -
2021-5-29 剑指 Offer 59 - II. 队列的最大值 (利用queue和deque实现单调双端队列)
注:题目:请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入:[“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”][[],[1],[2],[],[],[]]输出: [null,null,null,2,1原创 2021-05-29 15:37:27 · 158 阅读 · 0 评论 -
2021-5-9 剑指 Offer 37. 序列化二叉树(层序遍历 BFS)
注:① 需要掌握 string转int,char转int,str转char的方式,C++中若需要将string类型转为int类型,需先将string转为const char,在调用std::atoi()② 去掉string一头一尾的"[]" data.erase(data.begin()); data.erase(--data.end());题目:请实现两个函数,分别用来序列化和反序列化二叉树。示例:你可以将以下二叉树: 1 / \ 2 3 / \原创 2021-05-10 16:53:22 · 158 阅读 · 0 评论 -
2021-4-14 剑指 Offer 05. 替换空格(字符串操作)
注:熟悉字符串操作函数,string::insert()不能改变原string的长度,需要先调用string::resize()改变原来string的长度。题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000题解:1.外部数组(时间复杂度:O(N) 空间复杂度:O(N) )class Solution {public:原创 2021-04-14 11:10:20 · 152 阅读 · 0 评论 -
2021-5-13 剑指 Offer 44. 数字序列中某一位的数字(数学规律)
注:题目:数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。示例 1:输入:n = 3输出:3示例 2:输入:n = 11输出:0限制:0 <= n < 2^31题解:解题思路:将 101112 ⋯ 中的每一位称为 数位 ,记为 n ;将 10, 11, 12,⋯ 称为 数字 ,记为 num ;数字 10 是一个两位原创 2021-05-13 15:01:33 · 319 阅读 · 0 评论 -
2021-4-15 剑指 Offer 06. 从尾到头打印链表(递归,辅助栈,数组反转)
注:打印链表不是反转链表题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000题解:1.递归/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val原创 2021-04-15 11:10:16 · 172 阅读 · 0 评论 -
2021-4-25 剑指 Offer 17. 打印从1到最大的n位数(大数打印,全排列)
注:为了避免大数溢出,要用string存储数字,之后调用std::stoi()来将string转换为int。题目:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数题解:大数打印实际上,本题的主要考点是大数越界情况下的打印。需要解决以下三个问题:1. 表示大数的变量类型无论是 shor原创 2021-04-25 11:20:09 · 225 阅读 · 0 评论 -
2021-4-16 剑指 Offer 07. 重建二叉树(递归,迭代)
注:二叉树前序遍历的顺序为:先遍历根节点;随后递归地遍历左子树;最后递归地遍历右子树。二叉树中序遍历的顺序为:先递归地遍历左子树;随后遍历根节点;最后递归地遍历右子树。题目:题解:方法一:递归(时间复杂度:O(n) 空间复杂度:O(n))思路对于任意一颗树而言,前序遍历的形式总是:[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]即根节点总是前序遍历中的第一个节点。中序遍历的形式总是:[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]原创 2021-04-16 16:10:18 · 369 阅读 · 0 评论 -
2021-5-28 剑指 Offer 59 - I. 滑动窗口的最大值(单调队列)
注:要注意窗口形成之前,单调队列内部元素的处理题目:给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3原创 2021-05-28 18:17:21 · 114 阅读 · 0 评论 -
2021-4-22 剑指 Offer 14- I. 剪绳子(动态规划,贪心算法)
注:题目:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3原创 2021-04-22 15:06:20 · 178 阅读 · 0 评论 -
2021-5-25 剑指 Offer 57. 和为s的两个数字(双指针)
注:题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 <= nums.length <= 10^51 <= nums[i] <=原创 2021-05-25 16:30:37 · 156 阅读 · 0 评论 -
2021-5-13 剑指 Offer 42. 连续子数组的最大和(优化空间的动态规划)
注:此动态规划题目可以将空间复杂度优化到O(1)。题目:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] <= 100题解:动态规划解析状态定义: 设动态规划列表 dp原创 2021-05-13 10:24:06 · 142 阅读 · 0 评论 -
2021-4-30 剑指 Offer 27. 二叉树的镜像(递归,辅助栈)
注:题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4 / \ 2 7 / \ / \1 3 6 9镜像输出: 4 / \ 7 2 / \ / \9 6 3 1示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]限制:0 <= 节点个数 <= 1000题解:方法一:递归法根据二叉树镜像的定义,考虑递归遍历(d原创 2021-04-30 11:12:04 · 188 阅读 · 0 评论 -
2021-4-18 剑指 Offer 10- II. 青蛙跳台阶问题(动态规划)
注:题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 100题解:方法1 递归(超时)class Solution {public: int sum(int n){原创 2021-04-18 14:34:12 · 170 阅读 · 0 评论 -
2021-5-16 剑指 Offer 47. 礼物的最大价值 (动态规划及其空间复杂度优化)
注:题目:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物提示:0 < grid.length <= 2000 < gr原创 2021-05-16 15:22:29 · 288 阅读 · 0 评论
分享