随笔分类 - 算法
随手写的
摘要:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/ class Solution { public int maxProfit(int k, int[] prices) { // 由于可以交易k次,以多少次持有来划分状态
阅读全文
摘要:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/description/ 这一题较难,难点是状态比较多,需要考虑两笔交易,则共5个状态需要被记录,用当前是否持有股票来划分子集进行计算 class Solution {
阅读全文
摘要:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/ class Solution { public: int maxProfit(vector<int>& prices) { vector<int>
阅读全文
摘要:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 经典股票题,此题有贪心做法 class Solution { public int maxProfit(int[] prices) { int res = 0; int min
阅读全文
摘要:https://leetcode.cn/problems/house-robber-iii/description/基础树形dp,要点是f的定义灵神讲的很好:https://www.bilibili.com/video/BV1vu4y1f7dn/?vd_source=1bb76d0400eba0d4
阅读全文
摘要:https://leetcode.cn/problems/house-robber-ii/description/ 灵神题解: https://leetcode.cn/problems/house-robber-ii/solutions/2445622/jian-ji-xie-fa-zhi-jie-
阅读全文
摘要:https://leetcode.cn/problems/word-break/description/ class Solution { public boolean wordBreak(String s, List<String> wordDict) { // 思路较为巧妙,和传统背包定义不同
阅读全文
摘要:https://leetcode.cn/problems/perfect-squares/description/ 简单完全背包,需要注意的是由于求的是最小,因此初始化时需要把初始层f[0]全置为无穷大,用于保证一定能计算出min具体可以看灵神的解释 递归边界:dfs(0,0)=0,因为没有数可以选
阅读全文
摘要:https://leetcode.cn/problems/coin-change/description/ 代码上比较麻烦的dp题,由于求的是最少数量,因此求答案时需要初始化无穷大来计算 class Solution { public int coinChange(int[] coins, int
阅读全文
摘要:https://leetcode.cn/problems/combination-sum-iv/description/ 此篇题解解释了为什么不能直接用二维完全背包的方式做不过还是建议把这个题当成一个爬楼梯来做 class Solution { public: int combinationSum4
阅读全文
摘要:https://leetcode.cn/problems/coin-change-ii/description/可以直接考虑用完全背包的传统二维做法,但是这里求的是组合数,需要注意 在求装满背包有几种方案的时候,认清遍历顺序是非常关键的。 如果求组合数就是外层for循环遍历物品,内层for遍历背包。
阅读全文
摘要:https://leetcode.cn/problems/ones-and-zeroes/solutions/ 多重体积的01背包,关键是需要想到把构造这个最长子集 等价为 往一个背包里塞物品,求能塞最多的物品是多少?且这里有两层体积这样想就能转化为01背包了,即f[i][j][k]表示在前i个物品
阅读全文
摘要:https://leetcode.cn/problems/target-sum/solutions/2119041/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-s1cx/ 灵神的代码实现比我自己写的更好,可以多学习学习这道题的关键点在于想到 正数和+负数和=ta
阅读全文
摘要:https://leetcode.cn/problems/last-stone-weight-ii/description/ 思路较为巧妙的dp题,关键点在于如何将问题转化为01背包,有点贪心的思想主要是划分为两堆尽可能相等的石碓,然后判断能否凑出这个偏小的石碓(若干石头中选,能否选出这个价值)这里
阅读全文
摘要:https://leetcode.cn/problems/partition-equal-subset-sum/description/ 01背包问题,需要考虑到如何把这个问题转化成01背包问题转换成01背包问题后,如何定义f[i]状态来表示 这里有两种方式:1.按照传统01背包表示,即前i个物品中
阅读全文
摘要:https://leetcode.cn/problems/unique-binary-search-trees/solutions/329807/bu-tong-de-er-cha-sou-suo-shu-by-leetcode-solution/ 较为困难的一道DP题,需要分析各个情况,以及想到如
阅读全文
摘要:https://leetcode.cn/problems/integer-break/ dp,思路较为巧妙,需要考虑一个数至少能拆成两份这个点,且需要考虑到拆的这个数的值域是多少(1,i-1),来划分子集且选择拆一次还是拆多次 class Solution { public: int integer
阅读全文
摘要:简单dphttps://leetcode.cn/problems/unique-paths-ii/description/ 传统做法: class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacl
阅读全文
摘要:https://leetcode.cn/problems/binary-tree-cameras/description/ 结合二叉树的贪心题,思路较难想出 /** * Definition for a binary tree node. * public class TreeNode { * in
阅读全文
摘要:https://leetcode.cn/problems/monotone-increasing-digits/description/ class Solution { public int monotoneIncreasingDigits(int n) { // 返回单调递增的最大数字 // 思
阅读全文

浙公网安备 33010602011771号