自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

考虑 dp[i][0] 的转移方程,如果这一天交易完后手里没有股票,那么可能的转移状态为前一天已经没有股票,即 dp[i−1][0],或者前一天结束的时候手里持有一支股票,即 dp[i−1][1],这时候我们要将其卖出,并获得 prices[i] 的收益。再来考虑 dp[i][1],按照同样的方式考虑转移状态,那么可能的转移状态为前一天已经持有一支股票,即 dp[i−1][1],或者前一天结束时还没有股票,即 dp[i−1][0],这时候我们要将其买入,并减少 prices[i] 的收益。

2025-09-25 11:23:47 340

原创 LeeCode 经典面试121. 买卖股票的最佳时机

解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。同时,你不能在买入前卖出股票。买股票的逻辑是在时间流中抄底,然后找到最高价卖出,所以需要边找最低点,边找最大差值。解释:在这种情况下, 没有交易完成, 所以最大利润为 0。输入:prices = [7,6,4,3,1]输入:[7,1,5,3,6,4]这题没一下解决说明不适合炒股。

2025-09-23 15:26:44 134

原创 leeCode动态规划256. 粉刷房子

当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个。个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。将 0 号房子粉刷成蓝色,1 号房子粉刷成绿色,2 号房子粉刷成蓝色。最少花费: 2 + 5 + 3 = 10。表示第 1 号房子粉刷成绿色的花费,以此类推。表示第 0 号房子粉刷成红色的成本花费;请计算出粉刷完所有房子最少的花费成本。

2025-07-12 12:59:48 211

原创 leeCode 动态规划 2140. 解决智力问题

总得分为:3 + 2 = 5。没有别的办法获得 5 分或者多于 5 分。总得分为:2 + 5 = 7。没有别的办法获得 7 分或者多于 7 分。- 解决问题 0 :获得 3 分,但接下来 2 个问题都不能解决。- 解决问题 1 :获得 2 分,但接下来 2 个问题都不能解决。,你可以对下一个问题决定使用哪种操作。解决问题 0 和 3 得到最高分。- 解决问题 3 :获得 2 分。- 解决问题 4 :获得 5 分。请你返回这场考试里你能获得的。- 不能解决问题 1 和 2。- 不能解决问题 2 和 3。

2025-07-11 03:16:09 316

原创 LeeCode 动态规划 95.不同的二叉搜索树II

我们递归调用这两部分,即generateTrees(start,i-1)和generateTree(i+1,end),获得所有可行的左子树和可行的右子树,那么最后一步我们只要从可行左子树集合中选一棵,再从可行右子树集合中选一棵拼接到根节点上,并将生成的二叉搜索树放入答案数组即可。因此在生成所有可行的二叉搜索树的时候,假设当前序列长度为n,如果我们枚举根节点的值为i,那么根据二叉搜索树的性质我们可以知道左子树的节点值的集合为[1...i - 1],右子树的节点值的集合为[i+1...n]。

2025-06-08 02:33:56 302

原创 LeeCode 动态规划96 不同的二叉搜索树

给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。假设 n 个节点存在二叉排列树的个数是G(n),令f(i)为以i为根的二叉搜索树的个数,则。当 i 为根节点时,其左子树节点个数为 i - 1 个,右子树节点为 n - i , 则。综合两个公式可以得到卡特兰数公式。

2025-06-07 13:18:23 221

原创 leeCode动态规划123与188.买卖股票的最佳时机

对于 buy1而言,在第 i 天我们可以不进行任何操作,保持不变,也可以在未进行任何操作的前提下以 prices[i] 的价格买入股票,那么 buy1​的状态转移方程即为:buy1=max{buy1′ ,−prices[i]} 这里我们buy1′表示第 i−1 天的状态,以便于和第 i 天的状态 buy1进行区分。同理可得sell2 = 0。buy1比buy1’多考虑的是在第i天买入股票的情况,而转移到sell1时,考虑的是在第i天卖出股票的情况,这样在同一天买入并且卖出收益为零,不会对答案产生影响。

2025-05-12 14:36:11 456

原创 LeeCode动态规划309和714 买卖股票的最佳时机

对于f[i][0],我们目前持有的这一支股票可以是在第 i - 1天就已经持有的,对应的状态为f[i-1][0];对于f[i][2],我们在第i天结束之后不持有任何股票并且不处于冷冻期,说明当天没有进行任何操作,即第i - 1天时不持有任何股票:如果处于冷冻期,对应的状态为f[i - 1] [1];对于f[i][1],我们在第i天结束之后处于冷冻期的原因是当天卖出了股票,那么说明在第i - 1天时我们必须持有一支股票,对应的状态为f[i - 1][0] 加上卖出股票的正收益prices[i]。

2025-05-12 00:06:03 296

原创 动态规划1312.让字符串成为回文串的最少插入次数

我们同样可以断定,回文中心cc一定是原字符串中的两个字符,否则如果cc中有至少一个是通过操作添加的字符,那么我们可以舍弃这些操作,此时s’成为长度为偶数(舍弃一次操作)或奇数(舍弃两次操作)的字符串,并且它仍是回文串(在例子中,即“adggda”->“adgda"或”adggda”->“adda”)。我们可以断定,回文中心c一定是原字符串s中的字符,否则如果c是通过操作添加的字符,那么我们可以舍弃这一步操作,此时s’成为长度为偶数的字符串,并且它仍是回文串(在例子中,即"adgda"->“adda”)。

2025-05-11 21:41:55 899

原创 LeeCode1964 找出到每个位置为止最长的有效障碍赛跑路线

给你一个 下标从 0 开始 的整数数组 obstacles ,数组长度为 n ,其中 obstacles[i] 表示第 i 个障碍的高度。返回长度为 n 的答案数组 ans ,其中 ans[i] 是上面所述的下标 i 对应的最长障碍赛跑路线的长度。输入:obstacles = [3,1,5,6,4,2]输入:obstacles = [1,2,3,2]输入:obstacles = [2,2,1]在这条路线中,必须包含第 i 个障碍。输出:[1,1,2,3,2,2]输出:[1,2,3,3]输出:[1,2,1]

2025-05-10 13:56:53 246

原创 LeeCode1143与1035(最长公共子序列)

ik, j1 < j2 < …//------------------------------------------------------------------------分隔线-----------------------------------------------------------------------要得到nums1[0:i] 和 nums2[0:j]的最长公共子序列,应取两项中的长度较大的一项,因此dp[i][j] = max(dp[i-1][j],dp[i][j-1])。

2025-05-10 13:49:11 656

原创 LeeCode动态规划1964.找出到每个位置为止最长的有效障碍赛跑路线

给你一个 下标从 0 开始 的整数数组 obstacles ,数组长度为 n ,其中 obstacles[i] 表示第 i 个障碍的高度。返回长度为 n 的答案数组 ans ,其中 ans[i] 是上面所述的下标 i 对应的最长障碍赛跑路线的长度。输入:obstacles = [3,1,5,6,4,2]输入:obstacles = [1,2,3,2]输入:obstacles = [2,2,1]在这条路线中,必须包含第 i 个障碍。输出:[1,1,2,3,2,2]输出:[1,2,3,3]输出:[1,2,1]

2025-05-08 20:39:04 185

原创 LeeCode354.俄罗斯套娃信封问题

给你一个二维整数数组envelopes,其中envelopes[i] = [wi,hi],表示第i个信封的宽度和高度。当另外一个信封的宽恕和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。解释:最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]。输入:envelopes = [[5,4],[6,4],[6,7],[2,3]]输入:envelopes = [[1,1],[1,1],[1,1]]注意:不允许旋转信封。

2025-05-08 13:07:42 166

原创 LeeCode 动态规划1027.等长等差数列

在上面的状态转移方程中,我们发现,当状态的第一维从i-1变成i后,实际上只有f[i][d][nums[i]]可能会相较于f[i-1][d][nums[i]]的值发生变化,而其余的值均保持不变。并且f[i-1][d][nums[i]-d]本身也需要是一个合法的状态,即必须要存在以nums[i]-d为末项的等差数组。记f[i][d][num]表示使用数组nums中下标小于等于i的元素,构造公差为d的等差数列,并且最后一个元素为num时,等差数列长度的。输入:nums = [20,1,15,3,10,5,8]

2025-05-07 12:00:17 935

原创 动态规划1218.最长定差子序列

令dp[i]表示以arr[i]为结尾的最长的等差子序列的长度,我们可以在arr[i]左侧找到满足arr[j]=arr[i]-d的元素,将arr[i]加到以arr[j]为结尾的最长的等差子序列的末尾,这样可以递推地从dp[j]计算出dp[i]。由于是在左侧找到一个最近的等于arr[i]-d元素并取其对应dp值,因此直接用dp[v]表示以v结尾的最长的等差子序列的长度,这样dp[v-d]就是我们需要找的左侧元素对应的最长的等差子序列的长度,因此转移方程可以改为。解释:最长的等差子序列是 [1,2,3,4]。

2025-05-07 07:12:04 259

原创 LeeCode 435.无重叠区间

虽然可以用dp求解,不过dp算法时间复杂度为O(n2),这在数据量大时会导致超时,因此需要改进优化,官方给出了改进的贪心求解法,主要思路是对intervals 中的首个区间进行求解,首个区间就是所有可以选择的区间中右端点最小的那个区间,在确定了首个区间后,所有与首个区间不重合的区间就组成了一个规模更小的子问题。由于我们已经按照左端点进行升序排序了,因此只要第j个区间的右端点r[j]没有越过第i个区间的左端点L[i],即R[j]<=L[i],那么第j个区间就与第i个区间不重叠。,l[n-1]以及r[0],…

2025-05-06 17:14:26 188

原创 LeeCode动态规划 673. 最长递增子序列的个数

最长子序列的确定逻辑和300的逻辑一致,但需要引入cnt[i]表示以nums[i]结尾的最长上升子序列的个数,设nums的最长上升子序列的长度为maxLen,那么答案为所有满足dp[i] = maxLen的i所对应的cnt[i]之和。有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。此题是LeeCode动态规划300的进阶版本,300的解析可以转。给定一个未排序的整数数组。返回最长递增子序列的个数。

2025-05-05 15:52:23 286

原创 leecode动态规划300.最长递增子序列

观察示例可以发现,最长子序列的最大值和最小值在遍历原序列的过程中是极有可能进行相应更新的,虽然题目整体思路仍然还是在遍历过程中确定每项最长子序列然后再由下一项和前排项进行比较来确定当前项最大子序列是否延长+1,但由于前面提到的最值更新会导致每一项的最大子序列排列起来不是单向的。因此,它的状态转移方程确定后,题目求解的结果不一定在序列的两端。设nums每一项到起始项的最大子序列长度数组为 dp 有题目可知每一项的最大子序列长度为。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。

2025-04-25 10:47:52 209

原创 LeeCode动态规划115.不同的子序列

设:对于已知长度的输入字符串 s 与 t,s[i:] 表示 s 从下标 i 到末尾的子字符串,t[j:] 表示 t 从下标 j 到末尾的子字符串。对于字符 s[i] = 字符 t[j] 时 ,dp[i][j]的匹配计算要么考虑起始字符, 即 dp[i+1][j+1] 两字符串各进一位;因此,dp[i][n] = 1;对于字符串s[i:], 当 i 等于 s 的末尾位 m 时,s[m:]为空字符串,除非 j = n 否则空字符串没有非空字符串子序列,故dp[m][j] = 0;对于字符s[i]!

2025-04-24 00:52:46 403

原创 C++基础 多态实现——利用虚方法实现父类指针调用子类方法

#include <iostream>class Father {public: Father() {}; virtual void Say() { std::cout << "I'm father!" << std::endl; }};class Son :public Father {public: Son() {}; void Say() { std::cout << "I'm son..." <&lt.

2022-04-10 16:47:38 270

原创 软件工程版本控制——入门篇01:利用git进行代码上传与回档

随着编程学习与工作进度的推进,很可能会出现这种情况:今天测试了一下午的代码,结果左改右改把工程改废了,出现了许多难以追溯的报错,想要推翻下午的修改,回退到上午的版本。一种可行的方法是在上午的时候,先开辟一个新的文件夹backup,复制粘贴备份工程。这样当下午想要回档时,就可以直接调用。这种方法在面对简单、修改频率不大的工程时可以适当使用。但是面对修改频率大且结构复杂的工程时,会非常占用私人电脑的硬盘空间,并且由于备份操作耗时费力,造成回档的版本选择范围有限,非常不灵活。 如果可以"很方便"地...

2021-04-03 03:45:18 696

原创 Qt designer 无响应

部分版本Qt安装后,无法打开designer,从而vs无法打开ui,进行界面编辑。可以尝试将Qt安装目录下的msvcXX(vs版本)\bin里的Qt5WebEngineWidgets.dll和Qt5WebEngineWidgetsd.dll重命名,如Qt5WebEngineWidgets11.dll、Qt5WebEngineWidgetsd11.dll即可解决designer打开无响应的问题。...

2019-05-11 08:34:41 1792 3

空空如也

空空如也

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

TA关注的人

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