自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 贪心算法专题

如果两个指针指向的字符不同,则两个字符中必须有一个被删除,此时我们就分成两种情况:即删除左指针对应的字符,留下子串 s[low+1:high],或者删除右指针对应的字符,留下子串 s[low:high−1]。设想一下,如果此时存在一个区间 [lj​,rj​],使得 rj​<rk​,即区间 j 的右端点在区间 k 的左侧,那么我们将区间 k 替换为区间 jjj,其与剩余右侧被选择的区间仍然是不重叠的。去除后,新的栈顶字符就与 s[i] 相邻了,我们继续比较新的栈顶字符与 s[i] 的大小。

2024-01-21 00:03:14 848

原创 回溯算法专题

leetcode回溯专题

2024-01-20 19:23:16 329

原创 337. 打家劫舍 III

我们可以用 f(o) 表示选择 o 节点的情况下,o 节点的子树上被选择的节点的最大权值和;g(o) 表示不选择 o 节点的情况下,o 节点的子树上被选择的节点的最大权值和;至此,我们可以用哈希表来存 f 和 g 的函数值,用深度优先搜索的办法后序遍历这棵二叉树,我们就可以得到每一个节点的 f 和 g。简化一下这个问题:一棵二叉树,树上的每个点都有对应的权值,每个点有两种状态(选中和不选中),问在不能同时选中有父子关系的点的情况下,能选中的点的最大权值和是多少。小偷又发现了一个新的可行窃的地区。

2024-01-20 19:19:07 337

原创 343. 整数拆分

令 x 是拆分出的第一个正整数,则剩下的部分是 n−x 可以不继续拆分,或者继续拆分成至少两个正整数的和。因此,当 j 固定时,有 dp[i]=max(j×(i−j),j×dp[i−j])。创建数组 dp[i] 表示将正整数 i 拆分成至少两个正整数的和之后,这些正整数的最大乘积。特别地,0 不是正整数,1 是最小的正整数,0 和 1 都不能拆分,因此 dp[0]=dp[1]=0。最终得到 dp[n] 的值即为将正整数 n 拆分成至少两个正整数的和之后,这些正整数的最大乘积。返回 你可以获得的最大乘积。

2024-01-20 19:16:32 283

原创 152. 乘积最大子数组

具体地讲,如果 a={5,6,−3,4,−3},那么此时 fmax​ 对应的序列是 {5,30,−3,4,−3},按照前面的算法我们可以得到答案为 30,即前两个数的乘积,而实际上答案应该是全体数字的乘积。它代表第 i 个元素结尾的乘积最大子数组的乘积 fmax​(i),可以考虑把 ai​ 加入第 i−1 个元素结尾的乘积最大或最小的子数组的乘积中,二者加上 ai​,三者取大,就是第 i 个元素结尾的乘积最大子数组的乘积。第 i 个元素结尾的乘积最小子数组的乘积 fmin​(i) 同理。

2024-01-20 19:10:46 341

原创 120. 三角形最小路径和

由于每一步只能移动到下一行「相邻的节点」上,因此要想走到位置 (i,j),上一步就只能在位置 (i−1,j−1) 或者位置 (i−1,j)。这里的位置 (i,j) 指的是三角形中第 i 行第 j 列(均从 0 开始编号)的位置。这样一来,我们从1开始递增地枚举i,并在 [0,i] 的范围内递增地枚举 j,就可以完成所有状态的计算。即当我们在第 i 行的最左侧时,我们只能从第 i−1 行的最左侧移动过来。最终的答案即为 f[n−1][0] 到 f[n−1][n−1] 中的最小值,其中 n 是三角形的行数。

2024-01-20 17:58:05 276

原创 96. 不同的二叉搜索树 I & II

给定一个有序序列1⋯n,为了构建出一棵二叉搜索树,我们可以遍历每个数字i,将该数字作为树根,将 1⋯(i−1) 序列作为左子树,将 (i+1)⋯n 序列作为右子树。接着我们可以按照同样的方式递归构建左子树和右子树。给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。由此可见,原问题可以分解成规模较小的两个子问题,且子问题的解可以复用。在上述构建的过程中,由于根的值不同,因此我们能保证每棵二叉搜索树是唯一的。

2024-01-20 17:52:26 334

原创 64. 最小路径和

对于不在第一行和第一列的元素,可以从其上方相邻元素向下移动一步到达,或者从其左方相邻元素向右移动一步到达,元素对应的最小路径和等于其上方相邻元素与其左方相邻元素两者对应的最小路径和中的最小值加上当前元素的值。由于路径的方向只能是向下或向右,因此网格的第一行的每个元素只能从左上角元素开始向右移动到达,网格的第一列的每个元素只能从左上角元素开始向下移动到达,此时的路径是唯一的,因此每个元素对应的最小路径和即为对应的路径上的数字总和。显然,dp[0][0]=grid[0][0]。

2024-01-20 17:50:24 350

原创 1395. 统计作战单位数

这样以来,任何一个出现在iless​中的士兵i,以及出现在kmore​中的士兵k,都可以和j组成一个严格单调递增的三元组;同理,任何一个出现在imore​中的士兵i,以及出现在 klessk_{\textit{less}}kless​ 中的士兵k,都可以和j组成一个严格单调递减的三元组。枚举三元组 (i,j,k)(i, j, k)(i,j,k) 中的 jjj,它是三元组的中间点。每个士兵都可以是多个作战单位的一部分。每个士兵都有一个 独一无二 的评分 rating。我们将所有的值进行累加即可得到答案。

2024-01-20 17:45:18 380

原创 1105. 填充书架

因为最多1000本书, 每本书高度最大1000,我们可以把dp[i] 初始化为1000000,初始化dp[0]为零,表示没有书是高度为零。重复这个过程,直到把所有的书都放在书架上。例如,如果这里有 5 本书,那么可能的一种摆放情况是:第一和第二本书放在第一层书架上,第三本书放在第二层书架上,第四和第五本书放在最后一层书架上。需要注意的是,在上述过程的每个步骤中,摆放书的顺序与给定图书数组 books 顺序相同。每一层所摆放的书的最大高度就是这一层书架的层高,书架整体的高度为各层高之和。

2024-01-20 17:16:22 320

原创 22. 括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

2024-01-20 17:02:56 370

原创 122. 买卖股票的最佳时机 II

每一天的状态只与前一天的状态有关,而与更早的状态都无关,因此我们不必存储这些无关的状态,只需要将dp[i−1][0] 和dp[i−1][1] 存放在两个变量中,通过它们计算出dp[i][0]和dp[i][1] 并存回对应的变量,以便于第i+1天的状态转移即可。考虑dp[i][0] 的转移方程,如果这一天交易完后手里没有股票,那么可能的转移状态为前一天已经没有股票,即dp[i−1][0],或者前一天结束的时候手里持有一支股票,即dp[i−1][1],这时候我们要将其卖出,并获得prices[i]的收益。

2024-01-20 16:51:55 823

原创 递归算法专题

leetcode 121.买卖股票的最佳时机

2024-01-20 16:41:17 377

原创 动态规划专题

leetcode动态规划专题

2024-01-20 16:33:47 376

原创 【无标题】

leetcode好题分享

2024-01-20 16:24:18 292

原创 基于oneAPI实现并行运算

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

2023-12-02 17:32:20 811

空空如也

空空如也

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

TA关注的人

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