- 博客(45)
- 收藏
- 关注
原创 代码随想录算法训练营 | 动态规划 part08
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。最终的最大利润是 dp[n - 1][k][0],因为结束时持有 0 份股票的收益一定大于持有 1 份股票的收益。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。(这里最大交易次数减少一次,是因为买入操作会使用一次交易(买入-卖出为一次交易)),买入的最大利润为第。返回你可以从这笔交易中获取的最大利润。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
2024-08-23 16:49:11
1050
原创 代码随想录算法训练营 | 动态规划 part07
同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。
2024-08-19 23:41:43
413
原创 代码随想录算法训练营 | 动态规划 part06
现在有 N 种不同类型的矿石,每种矿石有一个重量 w[i],一个价值 v[i],以及最多 k[i]个可用。在这个行星上,有许多不同类型的矿石资源,每种矿石都有不同的重要性和价值。你需要选择哪些矿石带回地球,但你的宇航舱有一定的容量限制。输入共包括四行,第一行包含两个整数 C 和 N,分别表示宇航舱的容量和矿石的种类数量。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。第四行包含 N 个整数,表示 N 种矿石的可用数量上限。
2024-08-19 22:41:38
1883
原创 代码随想录算法训练营 | 动态规划 part05
这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的重量,并且具有不同的价值。小明的行李箱所能承担的总重量为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料可以选择无数次,并且可以重复选择。当 m = 2,n = 3 时,n = 3 这表示一共有三个台阶,m = 2 代表你每次可以爬一个台阶或者两个台阶。输入共一行,包含两个正整数,分别表示n, m 输出描述 输出一个整数,表示爬到楼顶的方法数。第一行包含两个整数,N,V,分别表示研究材料的种类和行李空间。
2024-08-17 21:05:56
985
原创 代码随想录算法训练营 | 动态规划 part04
1049. 最后一块石头的重量 II假设只有两块石头,那么就是答案,这两个石头的重量越相近,结果越小;重量相等时,结果为0;推演为两堆石头stones1和stones2,当两堆石头的重量最接近时,答案最小;对于本题;将石头分成两堆;使得这两堆石头的重量趋近于总重量的一半,这里两堆石头抵消的差值就最小了;如果总重量为sum,结果0-1背包问题:背包的最大容量为sum / 2i表示前i个石头,j表示背包最大容量;dp[j]容量为j的背包能装下的石头最大重量;
2024-08-17 21:05:10
743
原创 代码随想录算法训练营 | 动态规划 part03
因为元素都是正整数,所以每个子集和必须时正整数,对于总元素和为奇数时,不满足子集和为正整数,即不存在将数组分割成两个子集,且两个子集的元素和相等;小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。将每一个子集都看作一个背包,每一个数字都有放入和不放入两种选择,想让子集和等于一半的所有元素和,所以背包容量取总元素和的一半;第一行包含两个正整数,第一个整数 M 代表研究材料的种类,第二个正整数 N,代表小明的行李空间。
2024-08-16 21:50:34
853
原创 代码随想录算法训练营 | 动态规划 part02
所以一个正整数对应的最大乘积 取决于 拆分出的数 和 这个数对应的最大乘积;时)也可以继续拆分成至少两个正整数的和,也可以不拆分。当 n≥2 时,可以拆分成至少两个正整数的和。用数组dp存储每一个数字的最大乘积;0 和 1不能拆分,就取他们本身的值;将dp table压缩为一维数组。设 这两个正整数分别是。
2024-08-16 21:49:53
496
原创 代码随想录算法训练营 | 动态规划 part01
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?需要 n 阶你才能到达楼顶。同样只与前两个状态有关;请你计算并返回达到楼梯顶部的最低花费。阶向上爬一个台阶,并支付从楼梯第。阶向上爬两个台阶,并支付从楼梯第。只与前两个状态有关;个台阶向上爬需要支付的费用。个台阶向上爬需要支付的费用。
2024-08-14 23:57:20
471
原创 代码随想录算法训练营 | 贪心算法 part05
节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。当发现当前数字大于下一个数字时,就把当前数字减。给定一个二叉树,我们在树的节点上安装摄像头。:让叶子节点的父节点安摄像头,所用摄像头最少。计算监控树的所有节点所需的最小摄像头数量。从哪里开始,同时将赋值循环分离出来;,最后两位数同样被再次赋值;,后面的所有数字都设置成。:全部摄像头数量所用最少。
2024-08-14 23:44:30
528
原创 代码随想录算法训练营 | 贪心算法 part04
比如:[[1,10],[3,9],[4,11],[6,7],[6,9]] 的重合区间为[6,7];发现箭在边界也可以引爆气球,我们不需要维护一个重合区间,只要维护重合区间的右端点即可;排序后数组points = [[1,10],[3,9],[4,11],[6,7],[6,9],[8,12],[9,12]]比如:[[1,10],[3,9],[4,11],[6,7],[6,9]] 的最小范围区间为[6,7];:尽可能多的气球重合,计算完全重叠的区间,在重合区间内射箭,可以一箭射爆这些重叠的气球;
2024-08-13 21:59:42
552
原创 代码随想录算法训练营 | 贪心算法 part03
也就是说,当我们放入第 i 个人时,只需要将其插入队列中,使得他的前面恰好有。5 美元可以给 10 美元和 20 美元找零;对于支付 20 美元,就要优先找零 10 美元;3、支付 20 美元,优先找零一张 10 美元和 5 美元;如果不够,就找零三张 5 美元;:顾客支付 20 美元,优先找零一张 10 美元和 5 美元;2、支付 10美元,找零一张 5 美元,增加一张 10 美元;1、支付 5 美元,不用找零,直接收下,增加一张 5 美元;对于支付 5 美元和支付 10 美元,找零请况是固定的;
2024-08-13 21:57:46
385
原创 代码随想录算法训练营 | 贪心算法 part02
较大的正数越多和越大,优先将绝对值大的负数取反;如果负数全部取反后,K次还大于0,将最小的非负数反复取反;:以 最小步数 增加最远能跳到的位置;每跳跃一步,在前一步跳跃覆盖的范围内寻找下一个可以跳到。:在价格趋势呈上涨的两端买入和卖出,保证利润为正值;从这两个位置中选取可以跳的更远的一个下标作为新的其实位置;:最后更新的最远可以跳到的位置是否可以到达数组的最后一个下标。:到达数组最后一个下标位置的最小跳跃次数。:计算所有局部最优的和,求得最大利润。位置的下标,作为该步跳跃的起始位置;:最远能跳到的位置,
2024-08-12 22:54:32
611
原创 代码随想录算法训练营 | 贪心算法 part01
的本质是选择每一阶段的局部最优,从而达到全局最优。什么是局部最优,局部最优能否推出全局最优(举反例 举不出来的时候就可以试试贪心)
2024-08-12 22:51:19
251
原创 代码随想录算法训练营 | 二叉树part08
每一个节点都有一个平衡因子(balance factor),任一节点的平衡因子是-1、0、1(每一个节点的平衡因子 = 右子树高度 - 左子树高度)要每个节点 node 的新值等于原树中大于或等于 node.val 的值之和;根据二叉搜索树的性质要优先遍历右子树,得到节点和;给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡二叉搜索树。会想到判断大于low的右子树,但是具体的处理很懵,脑子里全是删除节点的操作。树的每个左子树和右子树都是AVL树。
2024-07-28 16:17:36
249
原创 代码随想录算法训练营 | 二叉树part07
但考虑到二叉搜索树有序,判断当前节点值与p,q节点值的大小来判断p,q在那颗子树上,在决定是否遍历子树。
2024-07-28 16:17:03
219
原创 代码随想录算法训练营 | 二叉树part06
遍历二叉树,使用map存储相同节点值和个数;在遍历map,取出可以作为众数的节点值;中序遍历得到的结果是有序的,最小的绝对差只可能出现在相邻元素中;利用二叉搜索树 有序的特性。
2024-07-27 17:16:00
364
原创 代码随想录算法训练营 | 二叉树part05
若它的左子树不空,则左子树上的所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上的所有节点的值均大于它的根节点的值;它的左右子树也分别是二叉搜索树;利用构造二叉树的思想,前序遍历,构造中间节点,在构造左右子树的vector容器,递归遍历左右子树。给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。给定二叉搜索树(BST)的根节点 root 和一个整数值 val。节点的左子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。中序遍历的结果是递增的;
2024-07-27 17:15:05
281
原创 代码随想录算法训练营 | 二叉树part04
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum。判断该树中是否存在 根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum。否则,返回 false。给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。叶子节点 是指没有子节点的节点。叶子节点 是指没有子节点的节点。
2024-07-26 16:26:10
468
原创 代码随想录算法训练营 | 二叉树part03
除了最底层节点没填满外,其余每层节点数都达到最大值,并且最后一层的节点都集中在该层最左边的若干位置;给定一个二叉树,判断它是否是 平衡二叉树(该树所有节点的左右子树的深度相差不超过 1 )完全二叉树中的节点的左右子树,要么都是满二叉树,要么一颗是满二叉树,一颗是完全二叉树;:遍历二叉树来计算节点个数;代码同二叉树的前序/中序/后序/层序遍历。
2024-07-26 16:25:16
268
原创 代码随想录算法训练营 | 二叉树part02
叶子节点所在的层数即为它的深度,层序遍历可以保证最先访问到的叶子节点深度最小,即整棵二叉树的最小深度。:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始):指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)同104计算根节点的最小高度,注意左右子字节一方为空的情况。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。计算二叉树的最大深度即计算二叉树的层数;说明:叶子节点是指没有子节点的节点。根节点的高度就是二叉树的最大深度;
2024-07-19 21:58:42
412
原创 代码随想录算法训练营 | 二叉树part01
叶子节点所在的层数即为它的深度,层序遍历可以保证最先访问到的叶子节点深度最小,即整棵二叉树的最小深度。102变形,这里只需要将判断左右子节点,改为判断存储子节点的children数组即可。和116一样的方法,层序遍历,链接当前层的节点。前序遍历:根结点 —> 左子树 —> 右子树。后序遍历:左子树 —> 右子树 —> 根结点。中序遍历:左子树—> 根结点 —> 右子树。计算二叉树的最大深度即计算二叉树的层数;找到层序遍历的每一层的最后一个节点。层次遍历:只需按层次遍历即可。
2024-07-19 16:44:04
429
原创 代码随想录算法训练营 | 栈与队列part02
当数据类型不是基本数据类型,而是自定义的数据类型时,就不能使用greater或less的比较方式了,而需要自定义比较方式;有两种自定义比较方式的方法,分别是:1.重载运算符 重载”<”;2.重写仿函数。
2024-07-13 21:35:16
405
原创 代码随想录算法训练营 | 栈与队列part01
你所使用的语言也许不支持队列。你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。pop元素时,将_que1的头部的元素(除了最后一个元素外),重新添加到队尾。
2024-07-12 23:13:07
589
原创 代码随想录算法训练营第六天| 字符串part02
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。第二行为字符串 s,代表需要旋转的字符串。解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。给你一个字符串 s ,请你反转字符串中 单词 的顺序。
2024-07-11 21:38:00
470
原创 代码随想录算法训练营第六天| 字符串part01
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。如果剩余字符少于 k 个,则将剩余字符全部反转。
2024-07-10 20:06:04
329
原创 代码随想录算法训练营第六天| 哈希表part02
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target。给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < n。你返回所有和为 0 且不重复的三元组。
2024-07-10 20:01:37
404
原创 代码随想录算法训练营第六天| 哈希表part01
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。输入:nums1 = [1,2,2,1], nums2 = [2,2]对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。如果这个过程 结果为 1,那么这个数就是快乐数。
2024-07-09 23:20:34
419
原创 代码随想录算法训练营第四天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交 、142.环形链表II
此时,fast 指针已经走完了环的 n 圈,因此它走过的总距离为 a+n(b+c)+b=a+(n+1)b+nc (c是环减去b的长度)。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。如果链表无环,则返回 null。
2024-07-08 22:41:50
552
1
原创 代码随想录算法训练营第三天| 203.移除链表元素、707.设计链表、206.反转链表
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。3,pre的next指向新节点(p1) head的next也指向了p1 4,pre断开与head的链接 与p1关联起来。2,将pre指针与head关联起来 这样pre的next指向哪里 head的next也指向哪里。反转时,对于头节点,要让其指向nullptr,其他节点指向它的前一个节点;给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
2024-07-08 01:17:22
345
原创 代码随想录算法训练营第二天| 977.有序数组的平方、209.长度最小的子数组 、59.螺旋矩阵II
数组可以分为负数和非负数两部分,负数部分平方后为非递增,非负数部分平方后为非递减,整体成一个U型,我们选择异向双指针,从两端开始比较,取较大部分逆序放入新数组;给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。如果不存在符合条件的子数组,返回 0。给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。输出:[[1,2,3],[8,9,4],[7,6,5]]
2024-07-08 01:15:45
477
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。这里就是slow表示 不等于val 的数组下标,fast 去遍历原来的数组,如果nums[fast]不等于val,满足条件,就更新到nums[slow],并更新slow;解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。输入:nums = [0,1,2,2,3,0,4,2], val = 2。
2024-07-03 19:13:45
1911
1
原创 C++Primer第五版 第7章 类 7.6类的静态成员 练习
静态成员与普通成员的区别:主要体现在普通成员与类的对象关联,是某个具体对象的组成部分,而静态成员不从属于任何具体的对象,它由该类的所有对象共享。静态成员的优点包括:作用域位于类的范围之内,避免与其他类的成员或者全局作用域的名字冲突;rate和vec的初始化是错误的,因为除了静态常量成员之外,其他静态成员不能在类的内部初始化;答:静态成员是指声明语句之前带有关键字 static 的类成员,静态成员不是任意单独对象的组成部分,而是由该类的全体对象所共享。练习7.58 下面的静态数据成员的声明和定义有错误吗?
2023-03-15 10:04:22
206
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人