自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 问答 (2)
  • 收藏
  • 关注

原创 书生·浦语大模型实战营 Lesson 3

构建检索问答链部署 Web Demo

2024-01-16 00:15:54 390

原创 书生·浦语大模型实战营 Lesson 2

InternLM-Chat-7B 模型生成 300 字小故事。Lagent 智能体工具调用 Demo。浦语·灵笔图文理解创作 Demo。

2024-01-09 08:35:25 402

原创 书生·浦语大模型实战营 Lesson 1

书生·浦语大模型全链路开源体系书生·浦语大模型开源历程书生·浦语大模型系列从模型到应用数据预训练微调部署

2024-01-07 19:22:44 434

原创 Leetcode| 84. 柱状图中最大的矩形 Day60

【代码】Leetcode| 84. 柱状图中最大的矩形 Day60。

2023-01-15 03:04:04 174

原创 Leetcode| 503. 下一个更大元素II、42. 接雨水 Day59

方法和739. 一样,区别在于一个循环数组一种方法是将两个数组拼接,另一种是模拟走两遍数组。

2023-01-15 02:13:14 113

原创 Leetcode| 739. 每日温度、496. 下一个更大元素 I Day58

在遍历nums2的过程中,我们要判断nums2[i]是否在nums1中出现过,因为最后是要根据nums1元素的下标来更新result数组。

2023-01-13 20:50:18 127

原创 Leetcode| 647. 回文子串、516. 最长回文子序列 Day57

可以看出 递推公式是计算不到 i 和j相同时候的情况,所以需要手动初始化 i == j 的情况。dp[i + 1][j - 1] 在 dp[i][j]的左下角,所以一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的。当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况。

2023-01-12 18:51:04 549

原创 Leetcode| 583. 两个字符串的删除操作、72. 编辑距离 Day56

递推公式:dp[i][j] = min(dp[i - 1][j - 1] + 2, dp[i - 1][j] + 1, dp[i][j - 1] + 1)当word1[i - 1] 与 word2[j - 1]相同的时候,dp[i][j] = dp[i - 1][j - 1];情况三:同时删word1[i - 1]和word2[j - 1],操作的最少次数为dp[i - 1][j - 1] + 2。情况一:删word1[i - 1],最少操作次数为dp[i - 1][j] + 1。那么说明不用任何编辑,

2023-01-11 14:39:10 274

原创 Leetcode| 392. 判断子序列、115. 不同的子序列 Day55

dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]

2023-01-09 22:20:44 65

原创 Leetcode| 1143. 最长公共子序列、1035. 不相交的线 Day53

dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]和718. 最长重复子数组 很像,区别在于不要求连续。和1143. 一样,找最长公共子序列。

2023-01-07 19:57:01 59

原创 Leetcode| 300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组 Day52

dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]dp[i][j] :以下标 i 为结尾的A,和以下标 j 为结尾的B,最长重复子数组长度为dp[i][j]dp[i]表示i之前包括i的以nums[i]结尾的最长连续递增子序列的长度。dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。因为要求连续,所以不需要0到i之间的遍历。

2023-01-06 21:58:22 63

原创 Leetcode| 309. 最佳买卖股票时机含冷冻期、714. 买卖股票的最佳时机含手续费 Day51

因为本题我们有冷冻期,而冷冻期的前一天,只能是 「今天卖出股票」状态,如果是 「不持有股票状态」那么就很模糊,因为不一定是 卖出股票的操作。比 122. 多了一个在卖出时要一个手续费。

2023-01-06 01:52:37 79

原创 Leetcode| 123. 买卖股票的最佳时机III、188. 买卖股票的最佳时机IV Day50

使用二维数组 dp[i][j] :第i天的状态为j,所剩下的最大现金是dp[i][j]

2023-01-04 21:11:30 93

原创 Leetcode| 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机II Day49

与 121 不同的是可以多次买卖,第 i 天持有股票即可能是第 i-1 天就已经持有 或 在第 i 天买入(第 i 天不持有股票即可能是第 i 天卖出或前一天也没有今天也没有操作。第 i 天持有股票即可能是第 i-1 天就已经持有或在第 i 天买入。最后不持有股票所得的现金一定比持有股票多,所以返回。

2023-01-03 22:07:59 54

原创 Leetcode| 198. 打家劫舍、213. 打家劫舍II、337.打家劫舍III Day48

利用后序遍历,通过递归左节点,得到左节点偷与不偷的金钱。通过递归右节点,得到右节点偷与不偷的金钱。最后得到‘中’节点不偷和偷时的最大值。若偷第i个房屋,dp[i] = dp[i-2] + nums[i]树形DP,dp数组为一个长度为2的数组,0: 不偷,1: 偷。若不偷,则dp[i] = dp[i-1]和上题的区别是变成环了,首尾不能同时偷。

2023-01-03 02:08:27 64

原创 Leetcode| 139. 单词拆分、多重背包 Day46

如果([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true本题需要考虑顺序,所以先遍历背包,再遍历物品。

2023-01-01 21:45:19 82

原创 Leetcode| 322. 零钱兑换、279. 完全平方数 Day45

凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j](考虑coins[i])递推公式:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);所以dp[j] 要取所有 dp[j - coins[i]] + 1 中最小的。dp[j]:凑足总额为j所需钱币的最少个数为dp[j]dp[j]:和为j的完全平方数的最少数量为dp[j]所以本题并不强调集合是组合还是排列。

2023-01-01 17:21:44 79

原创 Leetcode| 完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ Day44

dp[j] 就是所有的dp[j - coins[i]](考虑coins[i]的情况)相加。所以递推公式:dp[j] += dp[j - coins[i]];dp[i]: 凑成目标正整数为i的排列个数为dp[i]dp[j]:凑成总金额j的货币组合数为dp[j]

2023-01-01 02:54:58 72

原创 Leetcode| 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零 Day43

在计算target的时候,target = sum // 2 因为是向下取整,所以sum - dp[target] 一定是大于等于dp[target]的。那么分成两堆石头,一堆石头的总重量是dp[target],另一堆就是sum - dp[target]。那么相撞之后剩下的最小石头重量就是 (sum - dp[target]) - dp[target]。最后dp[target]里是容量为target的背包所能背的最大重量。假设加法的总和为x,那么减法对应的总和就是sum - x。

2022-12-30 02:37:33 70

原创 Leetcode| 01背包问题 二维、01背包问题 一维、416. 分割等和子集 Day42

【代码】Leetcode| 01背包问题 二维、01背包问题 一维、416. 分割等和子集 Day42。

2022-12-27 21:21:48 111

原创 Leetcode| 343. 整数拆分、96. 不同的二叉搜索树 Day41

j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量。拆分一个数n 使之乘积最大,那么一定是拆分成m个近似相同的子数相乘才是最大的。拆成大于等于三个时,每个子数一定小于等于n/2,所以j只需要遍历到n/2。m一定大于等于2,也就是 最差也应该是拆成两个相同的 可能是最大值。dp[i] : 1到i为节点组成的二叉搜索树的个数为dp[i]

2022-12-26 21:29:36 114

原创 Leetcode| 62. 不同路径、63. 不同路径 II Day39

递推公式和62.不同路径一样,dp[i][j] = dp[i - 1][j] + dp[i][j - 1]。dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,dp[0][j]也同理。dp[i][j] :表示从(0, 0)出发,到(i, j) 有dp[i][j]条不同的路径。因为有了障碍,(i, j)如果就是障碍的话应该就保持初始状态(初始状态为0)。因为只能向下或向右移动,所以。

2022-12-25 21:01:34 56

原创 Leetcode| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 Day38

dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]

2022-12-24 20:20:07 121

原创 Leetcode| 738. 单调递增的数字 Day37

局部最优:遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]–,然后strNum[i]给为9,可以保证这两位变成最大单调递增整数。但这里局部最优推出全局最优,还需要其他条件,即遍历顺序,和标记从哪一位开始统一改成9。全局最优:得到小于等于N的最大单调递增的整数。

2022-12-24 00:06:00 73

原创 Leetcode| 435. 无重叠区间、763. 划分字母区间、56. 合并区间 Day36

【代码】Leetcode| 435. 无重叠区间、763. 划分字母区间、56. 合并区间 Day36。

2022-12-23 00:29:50 69

原创 Leetcode| 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球 Day35

局部最优:遇到账单20,优先消耗美元10,完成本次找零。全局最优:完成全部账单的找零。

2022-12-21 00:20:45 105

原创 Leetcode| 1005. K次取反后最大化的数组和、134. 加油站、135. 分发糖果 Day34

贪心的思路,局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。

2022-12-20 02:59:14 53

原创 Leetcode| 122. 买卖股票的最佳时机II、55. 跳跃游戏、45. 跳跃游戏II Day32

i每次移动只能在cover的范围内移动。

2022-12-18 22:47:01 92

原创 Leetcode| 455. 分发饼干、376. 摆动序列、53. 最大子序和 Day31

遍历nums,从头开始用count累积,如果count一旦加上nums[i]变为负数,那么就应该从nums[i+1]开始从0累积count了,因为已经变为负数的count,只会拖累总和。局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列。

2022-12-18 16:58:45 98

原创 Leetcode| 491. 递增子序列、46. 全排列、47. 全排列 II Day29

为0,这样在树枝上也要做一下判断,确保同⼀树⽀。同一父节点下的同层上使用过的元素就不能再使用。与之前的题目不同,全排列不需要。,每次都要遍历整个数组,用一个。数组来判读本层是否使用过。由于每次是全部遍历,

2022-12-15 03:13:16 98

原创 Leetcode| 93. 复原IP地址、78. 子集、90.子集II Day28

与之前的组合问题不同,自己问题不是在叶子节点收集而是在所有节点收集。写代码时遇到了一个坑点,代码随想录中提供的代码。因为递归时和以往不同,下一轮的。函数是传入原数组和切割的首尾。,我则是直接Python切片。越界的情况,导致切割出的为。这题是78和40的结合。题目做法与回文串类似。判断,我这里需要判断。

2022-12-14 22:44:07 102

原创 Leetcode| 39. 组合总和、40. 组合总和II、131.分割回文串 Day27

先将数组排序,已经知道下一层的sum会大于target,就没有必要进入下一层递归了.必须先对数组排序,同一数层上如果相邻两个元素相等并且前一个使用过,则需要跳过。因为每个数字可以被无限次使用,所有递归传入的。每个candiate只有用一次。

2022-12-14 01:03:43 54

原创 Leetcode| 216. 组合总和III、17. 电话号码的字母组合 Day25

这个index是记录遍历第几个数字了,就是用来遍历digits的(题目中给出数字字符串),同时index也表示树的深度。已选元素总和如果已经大于targetSum了,那么往后遍历就没有意义了,直接剪掉。

2022-12-11 19:33:04 225

原创 Leetcode| 回溯基础、77. 组合 Day24

如果for循环选择的起始位置之后的元素个数 已经不足 我们需要的元素个数了,那么就没有必要搜索了。for循环每次从startIndex开始遍历,然后用path保存取到的节点i。如图,可以剪枝的地方就在递归中每一层的for循环所选择的起始位置。

2022-12-10 19:13:18 170

原创 Leetcode| 669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树 Day23

要使[1, 2, 3] -> [6, 5, 3],需要反向遍历,所以要对树进行反向中序遍历,用pre记录上一个节点的值。找到头节点,再将数组分隔,分别递归。

2022-12-08 20:50:10 341

原创 Leetcode| 235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点 Day22

利用二叉搜索树性质递归节点的值介于p和q之间就是最近公共祖先迭代701. Insert into a Binary Search Tree递归插入为叶子节点,不改变树的结构迭代双指针,记录父节点450. Delete Node in a BST共有5种情况要考虑

2022-12-07 12:16:16 57

原创 Leetcode| 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先 Day21

中序遍历后得到升序的数组,再遍历找到最新绝对值中序遍历,双指针pre 记录上一个节点501. Find Mode in Binary Search Tree中序遍历,双指针236. Lowest Common Ancestor of a Binary Tree递归,一层一层的把节点往上传

2022-12-07 00:03:52 39

原创 Leetcode| 654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98.验证二叉搜索树 Day20

递归,当数组长度为1时即是终止条件,返回叶子节点采用先序,中左右中节点是值最大的那个,然后左右递归,要保证左右区间都至少有一个数值允许空节点进入递归,不需要加判断来保证左右区间都至少有一个数值617. Merge Two Binary Trees递归,合并到tree1终止条件是某一棵树为空单层递归中,就要把两棵树的元素加到一起递归,重新定义一个树迭代把两个树的节点同时加入队列进行比较700. Search in a Binary Search Tree递归单层递归中记得要写,

2022-12-06 20:25:44 350

原创 Leetcode| 513. 找树左下角的值、112. 路径总和、113. 路径总和ii、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树 Day18

这题用层序遍历很简单,找最后一层的第一个节点优化了一下代码递归递归的终止条件是遇到深度最大的叶子节点用哪种遍历不重要,因为不需要对中节点进行操作简化代码112. Path Sum递归终止条件是遇到叶子节点,若count==0,则说明路径和等于targetSum简化代码迭代,用栈模拟递归113. Path Sum II方法与112类似注意点:或而不是是一个全局变量,在不断的被修改,相当于把这个钥匙存起来,只复制指针位置,后续修改后,前面存的也相应改变了。是浅复制,拷贝父对

2022-12-05 02:56:26 62

原创 Leetcode| 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和 Day17

后续遍历,判断每个节点的左右子树高度差是否大于1前序遍历只能通过父节点判断是否是左叶子节点。

2022-12-03 02:57:39 52

空空如也

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

TA关注的人

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