leetcode算法
文章平均质量分 58
多玩玩算法题保持脑瓜子不会嗡嗡嗡懵
HumorChen99
learn more and more,持续更新文章,快关注我。
展开
-
链表每N个节点的子链进行一次翻转(双指针法,每步注释,O(n)时间复杂度 O(1)空间复杂度)
执行一次翻转后 link list:8 9 10 7 6 5 4 3 2 1。执行一次翻转后 link list:8 9 10 5 6 7 4 3 2 1。执行一次翻转后 link list:8 9 10 5 6 7 2 3 4 1。翻转前 link list:10 9 8 7 6 5 4 3 2 1。翻转后 link list:8 9 10 5 6 7 2 3 4 1。翻转前 link list:8 7 6 5 4 3 2 1。翻转后 link list:6 7 8 3 4 5 2 1。原创 2023-01-31 16:40:25 · 564 阅读 · 0 评论 -
链表全部翻转、翻转前n个元素(双指针法,O(n)时间复杂度 O(1)空间复杂度)
链表全部翻转、翻转前n个元素(双指针法,O(n)时间复杂度 O(1)空间复杂度)原创 2023-01-31 15:10:49 · 222 阅读 · 0 评论 -
算法题:42. 接雨水(困难)一次AC 1ms(题目+思路+代码+注释)
根据木桶理论,竖着放的木桶能接多少水肯定取决于左右两边最高的木板高度,而在这个二维图中整个能接多少水我们可以拆解为求第i个列最多能接多少水,把每一列能接多少水加起来就是总共能接多少水了!解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]总共能接多少水 = 遍历求第i列能接多少水并求和。输入:height = [4,2,0,3,2,5]原创 2022-10-24 01:39:53 · 733 阅读 · 0 评论 -
算法题:25. K 个一组翻转链表 (困难)一次AC(题目+思路+代码+注释)
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。由于是个单链表,翻转链表直接用个栈即可,一次AC ,so easy!你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。输入:head = [1,2,3,4,5], k = 2。输入:head = [1,2,3,4,5], k = 3。那么这个问题被拆解后就成了一个最简单的翻转链表题了。输出:[2,1,4,3,5]输出:[3,2,1,4,5]链表中的节点数目为 n。原创 2022-10-22 23:55:36 · 403 阅读 · 0 评论 -
算法题:146. LRU 缓存 时间击败89%空间击败98.75%(题目+思路+代码+注释)
LRU算法要实现O(1)级的时间复杂度则必须试用过哈希来快速查找,而LRU有容量,那么在缓存淘汰时则必须去删除某个节点,并且确定删除的是最近未使用的缓存,要实现最近未使用只能使用双向链表来实现,由哈希表指向链表节点,用来快速定位,使用时将节点剔除并移动到最后面,淘汰时剔除链表最前面的节点,因为每次使用或插入新的就会把相关节点挪到最后面去,这样就实现了O(1)的时间复杂度的LRU算法。总之,利用链表添加删除的O(1)和哈希的O(1)查找能力实现整个时间复杂度O(1)的LRU算法。// 返回 -1 (未找到)原创 2022-10-22 23:00:30 · 286 阅读 · 0 评论 -
算法题:剑指 Offer 45. 把数组排成最小的数 时空10ms(题目+思路+代码+注释)
剑指 Offer 45. 把数组排成最小的数输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: “102”示例 2:输入: [3,30,34,5,9]输出: “3033459”提示:0 < nums.length ......原创 2022-07-13 21:05:19 · 143 阅读 · 0 评论 -
算法题:剑指 Offer 34. 二叉树中和为某一值的路径 时空 1ms击败99.98%用户(题目+思路+代码+注释)
题目剑指 Offer 34. 二叉树中和为某一值的路径给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]示例 2:输入:root = [1,2,3], targetSum = 5输出:[].原创 2022-03-28 16:04:18 · 1797 阅读 · 0 评论 -
算法题:剑指 Offer 33. 二叉搜索树的后序遍历序列 时空 0ms击败100.00%用户(题目+思路+代码+注释)
题目剑指 Offer 33. 二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true提示:数组长度 <= 1000来源:力扣(LeetCode)链.原创 2022-03-28 11:48:01 · 199 阅读 · 0 评论 -
算法题:剑指 Offer 32 - III. 从上到下打印二叉树 III 时空 1ms击败96.79%用户 一次AC(题目+思路+代码+注释)
题目剑指 Offer 32 - III. 从上到下打印二叉树 III请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[20,9],[15,7]]提示:节点总数 <= 1000来源:力扣(LeetCode)链接:https://le.原创 2022-03-25 19:14:43 · 168 阅读 · 0 评论 -
算法题:剑指 Offer 50. 第一个只出现一次的字符 时空 3ms击败99.35%用户 一次AC(题目+思路+代码+注释)
题目剑指 Offer 50. 第一个只出现一次的字符在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例 1:输入:s = “abaccdeff”输出:‘b’示例 2:输入:s = “”输出:’ ’限制:0 <= s 的长度 <= 50000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof著.原创 2022-03-24 18:40:40 · 315 阅读 · 0 评论 -
算法题:剑指 Offer 32 - II. 从上到下打印二叉树 II 时空 0ms击败100%用户 一次AC优于官方精选答案分层层序遍历(题目+思路+代码+注释)
题目剑指 Offer 32 - II. 从上到下打印二叉树 II从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]提示:节点总数 <= 1000注意:本题与主站 102 题相同:https://leetcode-cn.com/problems/binary-tree-level-.原创 2022-02-21 17:34:24 · 205 阅读 · 0 评论 -
算法题:面试题32 - I. 从上到下打印二叉树(题目+思路+代码+注释)层序遍历 时空 1ms击败97.84%用户 一次AC
题目面试题32 - I. 从上到下打印二叉树从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回:[3,9,20,15,7]提示:节点总数 <= 1000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof著作权归领.原创 2022-02-21 17:11:47 · 208 阅读 · 0 评论 -
算法题:剑指 Offer 39. 数组中出现次数超过一半的数字(题目+思路+代码+注释) 时空 1ms击败99.95%用户 一次AC
题目剑指 Offer 39. 数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000注意:本题与主站 169 题相同:https://leetcode-cn.com/problems/majority-element/来源:力扣(LeetCode)链接:http原创 2022-02-17 17:56:33 · 437 阅读 · 0 评论 -
算法题:剑指 Offer 38. 字符串的排列(题目+思路+代码+注释)回溯法 时空 5ms击败99.14%用户 一次AC
题目剑指 Offer 38. 字符串的排列输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]限制:1 <= s 的长度 <= 8来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof著作权归领扣网络所有。商业.原创 2022-02-09 18:34:05 · 237 阅读 · 0 评论 -
算法题:剑指 Offer 31. 栈的压入、弹出序列(题目+思路+代码+注释)快速幂解法 时空 1ms击败97%用户
一次AC的快乐题目剑指 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解释:我们可以按以下顺序执..原创 2021-11-10 11:02:29 · 209 阅读 · 0 评论 -
HW OD笔试三个算法题(提前一小时满分通过)
由于笔试时需要退出其他软件录制屏幕开启摄像头,因此原题只根据回忆写出第一题 M个数求最大的N个数和最小的N个数的和题目在提供的M个数里找最大的N个和最小的N个的和,需要自己去重,最大数集合和最小数集合有重合的则返回-1输入 第一行是数组元素个数M,第二行是数组里的数字,每个数字用空格隔开,第三个数字是N输入62 3 1 5 12 72输出22最大的2个数是 12 7,最小的两个数是1 2,则输出 12+7+1+2=22输入41 7 1 2 22输出-1最大的2个.原创 2021-09-16 15:54:20 · 7453 阅读 · 4 评论 -
算法题:剑指 Offer 16. 数值的整数次方(题目+思路+代码+注释)快速幂解法 时空 O(log2N) O(1) 0ms击败100%、95%用户
题目剑指 Offer 16. 数值的整数次方实现 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 = 1/22 = 1/4 = 0.25提示:-100.0 < x < 100.原创 2021-09-12 10:03:35 · 231 阅读 · 0 评论 -
算法题:剑指 Offer 42. 连续子数组的最大和(题目+思路+代码+注释)时空 O(N) O(1) 0ms击败98%、72%用户
题目剑指 Offer 42. 连续子数组的最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为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注意:本题与主站 53 题相同:https://leetco.原创 2021-09-09 10:45:27 · 220 阅读 · 0 评论 -
算法题:剑指 Offer 30. 包含min函数的栈(题目+思路+代码+注释)时空 O(1) O(1) 0ms击败94%、69%用户
题目剑指 Offer 30. 包含min函数的栈定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.t.原创 2021-09-08 17:02:30 · 219 阅读 · 0 评论 -
算法题:剑指 Offer 40. 最小的k个数(题目+思路+代码+注释)时空 O(N*LogN) O(1) 0ms击败56%、32%用户
题目剑指 Offer 40. 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <= k <= arr.length <= 100000 <= arr[i] <= 10000来源:力扣(.原创 2021-09-08 14:50:11 · 217 阅读 · 0 评论 -
算法题:剑指 Offer 35. 复杂链表的复制(题目+思路+代码+注释)时空 O(N) O(N) 0ms击败100%、47%用户
题外话,中等难度题一次AC秒杀100%用户属实有点小兴奋题目剑指 Offer 35. 复杂链表的复制请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]示例 2:输..原创 2021-09-08 11:28:51 · 239 阅读 · 0 评论 -
算法题:剑指 Offer 18. 删除链表的节点(题目+思路+代码+注释)时空 O(N) O(1) 0ms击败100%、81%用户
题目剑指 Offer 18. 删除链表的节点给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为.原创 2021-09-03 09:08:34 · 246 阅读 · 0 评论 -
算法题:剑指 Offer 24. 反转链表(题目+思路+代码+注释)时空 O(N) O(1) 0ms击败100%、80%用户
题目剑指 Offer 24. 反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000注意:本题与主站 206 题相同:https://leetcode-cn.com/problems/reverse-linked-list/来源:力扣(LeetCode).原创 2021-09-02 18:27:54 · 251 阅读 · 0 评论 -
算法题:剑指 Offer 17. 打印从1到最大的n位数(题目+思路+代码+注释)时空 O(N) O(1) 1ms击败99.45%、53.48%用户
题目剑指 Offer 17. 打印从1到最大的n位数输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof著作权.原创 2021-09-02 17:42:10 · 233 阅读 · 0 评论 -
算法题:剑指 Offer 22. 链表中倒数第k个节点(题目+思路+代码+注释)时空 O(N) O(1) 0ms击败100%、24%用户
题目剑指 Offer 22. 链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.来源:力扣(LeetCode)链接:https://leetcode-cn.c.原创 2021-09-02 17:29:32 · 225 阅读 · 0 评论 -
算法题:剑指 Offer 29. 顺时针打印矩阵(题目+思路+代码+注释)时空 O(N) O(1) 1ms击败97%、52%用户
题目剑指 Offer 29. 顺时针打印矩阵输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= mat.原创 2021-09-02 17:11:02 · 243 阅读 · 0 评论 -
算法题:剑指 Offer 15. 二进制中1的个数(题目+思路+代码+注释)时空 O(N) O(1) 0ms击败100%、81%用户
题目剑指 Offer 15. 二进制中1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -.原创 2021-09-02 15:49:43 · 223 阅读 · 0 评论 -
算法题:剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(题目+思路+代码+注释)时空 O(N) O(1) 2ms击败90%、67%用户
题目剑指 Offer 21. 调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:0 <= nums.length <= 500001 <= nums[i] <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.c.原创 2021-09-02 15:38:27 · 228 阅读 · 0 评论 -
算法题:剑指 Offer 20. 表示数值的字符串(题目+思路+代码+注释)时空 O(N) O(N) 5ms击败44%、33%用户
题目剑指 Offer 20. 表示数值的字符串请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)下述格式之一:至少一位数字,后面跟着一个点 ‘.’至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字一个点 ‘.’ ,后面跟着至少一位数字整数(按顺序)可以分.原创 2021-09-02 14:45:29 · 243 阅读 · 0 评论 -
算法题:剑指 Offer 28. 对称的二叉树(题目+思路+代码+注释)时空 O(N) O(N) 0ms击败100%、15%用户
题目剑指 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:输入:root = [1,2,2,.原创 2021-09-02 10:59:10 · 231 阅读 · 0 评论 -
算法题:剑指 Offer 26. 树的子结构(题目+思路+代码+注释)时空 O(N^2) O(N) 0ms击败100%、22%用户
题目输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,1]输出:true限制:0 <= 节点个数 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-de-zi-jie-g.原创 2021-09-02 10:25:21 · 258 阅读 · 0 评论 -
java 最简单递归比较两个二叉树是否相同
出口:如果两个节点都是空了,返回true不为空:则判断当前节点是否值相同:不相同则直接返回否,函数返回了。相同则继续对左节点和右节点进行判断,并返回两个节点判断的相与结果返回,只有当两个节点全部相等才会返回true。public boolean compareTwoTree(TreeNode t1,TreeNode t2){ if (t1 == null && t2 == null){ return true; }原创 2021-09-02 09:22:23 · 644 阅读 · 0 评论 -
算法题:剑指 Offer 27. 二叉树的镜像(题目+思路+代码+注释)时空 O(N) O(1) 0ms击败100%、64%用户
题目剑指 Offer 27. 二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]限制:0 <= 节点个数 <= 1000注意:本题与主站 226 题相同:https://leetcode-cn.com/problems/invert-binary-tree/来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-.原创 2021-08-29 18:40:20 · 283 阅读 · 0 评论 -
算法题:剑指 Offer 25. 合并两个排序的链表(题目+思路+代码+注释)时空 O(N) O(1) 1ms击败68%、70%用户
题目剑指 Offer 25. 合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000注意:本题与主站 21 题相同:https://leetcode-cn.com/problems/merge-two-sorted-lists/来源:力扣(LeetCode)链接.原创 2021-08-29 18:18:09 · 227 阅读 · 0 评论 -
算法题:剑指 Offer 14- II. 剪绳子 II(题目+思路+代码+注释)时空 O(1) O(1) 0ms击败100%、88%用户(数学推导运算法和状态转移方程的记忆法两种解法)
题目剑指 Offer 14- II. 剪绳子 II(题目+思路+代码+注释)给你一根长度为 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。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。.原创 2021-08-29 14:56:04 · 249 阅读 · 0 评论 -
算法题:剑指 Offer 14- I. 剪绳子(题目+思路+代码+注释)时空 O(1) O(1) 0ms击败100%、74%用户(数学推导运算法和状态转移方程的记忆法两种解法)
题目剑指 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 = .原创 2021-08-28 17:12:47 · 231 阅读 · 0 评论 -
算法题:剑指 Offer 07. 重建二叉树(题目+思路+代码+注释)时空时间优先选O(N) O(N) 2ms击败97%、76%用户,空间优先则选O(N*logN) O(1)
题目剑指 Offer 07. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]限制:0 <= 节点个.原创 2021-08-26 14:36:55 · 245 阅读 · 0 评论 -
算法题:剑指 Offer 06. 从尾到头打印链表(题目+思路+代码+注释)时空复杂度最低 0ms击败100%用户 指针法
题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路是个简单题,不多说,即时是用栈、列表这些,其实.原创 2021-08-06 16:48:24 · 226 阅读 · 0 评论 -
算法题:剑指 Offer 13. 机器人的运动范围(题目+思路+代码+注释)时空O(m*n) O(m*n) 0ms击败100%、35%用户
题目剑指 Offer 13. 机器人的运动范围地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k .原创 2021-08-06 14:15:37 · 254 阅读 · 0 评论 -
算法题:剑指 Offer 05. 替换空格(题目+思路+代码+注释)时空O(N) O(1) 0ms击败100%、88%用户
题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路题目过于简单,甚至你可以直接一句话过比如class.原创 2021-08-06 10:56:52 · 264 阅读 · 0 评论