- 博客(45)
- 收藏
- 关注
原创 DAY 57 动态规划
dp[i][j]:text1中前i个元素和text2中前j个元素的最长公共子序列dp[i]:nums[0]~nums[i]的最大和的连续子数组的和。
2023-07-10 19:29:22
281
原创 DAY 56 动态规划
dp[i]指以nums[i]结尾的最长递增子序列的长度dp[i]指以nums[i]结尾的最长且连续递增子序列的长度dp[i][j]指nums1中前i个元素和nums2中前j个元素的最长重复子数组长度。
2023-07-10 15:50:46
277
原创 DAY 55 动态规划
由于含有冷冻期,故dp[i][1]的第一种情况:dp[i-1][1];第二种情况:今天买入,则考虑冷冻期,前天卖出 dp[i - 2][0] - prices[i]dp[i][1]的第一种情况:dp[i-1][1];第二种情况:今天买入, dp[i - 1][0] - prices[i] - fee。dp[i][0]第一种:dp[i-1][0],第二种:dp[i - 1][1] + prices[i]dp[i][0]第一种:dp[i-1][0],第二种:dp[i - 1][1] + prices[i]
2023-07-07 16:07:55
203
原创 DAY 52 动态规划
1.第i天不持有股票:dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] + prices[i]);1.第i天不持有股票:dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] + prices[i]);2.第i天持有股票:dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);则所求为max(dp[n-1][0],dp[n-1][1]) = dp[n-1][0],显然,不持有股票时的利润高。
2023-07-05 23:17:06
97
原创 DAY 51 动态规划
每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。① 抢 i - 1 ,则 i - 2 一定不抢,则dp[i] = dp[i - 2] + nums[start + i - 1]① 抢 i - 1 ,则 i - 2 一定不抢,则dp[i] = dp[i - 2] + nums[i - 1]②不抢 i - 1 ,则看 i-2 的情况即可 dp[i] = dp[i - 1]dp[i] 给定数组的前i家抢到的最大金额。
2023-07-05 19:55:49
137
原创 DAY 48 完全背包
给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target。给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。情形二:物品可以放入背包—— ① 不放入:dp[i - 1][j];情形一:物品不可以放入背包——dp[i][j] = dp[i-1][j]选择前 0 个硬币,装容量 j 大于1的背包,dp[0][j] = 0。dp[i][j] 前 i 个硬币可以凑成总金额为 j 的组合数。背包容量为0,选择前 i 个硬币,dp[i][0] = 1。
2023-07-03 21:02:33
120
原创 DAY46 背包
情形二:背包容量足够,物品可选择是否装入背包dp[i][j]=max(dp[i-1][j],dp[i-1][j-nums[i-1]]+nums[i-1])情形一:背包容量不足,物品无法装入背包 if (nums[i-1] > j) dp[i][j]=dp[i-1][j]情形二:背包容量足够,dp[i][j]=dp[i-1][j] + dp[i-1][j-nums[i-1]]dp[i][j]:nums中前i个元素得到和为j的子集有dp[i][j]种划分方法。第二层:重量遍历,石头重量大于0,j=1;
2023-07-01 16:48:39
183
原创 DAY 45 动态规划:背包
给你一个可装载重量为 W 的背包和 N 个物品,每个物品有重量和价值两个属性。其中第 i 个物品的重量为 wt[i],价值为 val[i],现在让你用这个背包装物品,最多能装的价值是多少?
2023-06-29 23:34:26
101
原创 muduo-01 IO的阻塞和非阻塞
用户线程不断的发起 read 调用,数据没到内核空间时,每次都返回失败,直到数据到了内核空间,这一次 read 调用后,在等待数据从内核空间拷贝到用户空间这段时间里,线程还是阻塞的,等数据到了用户空间再把线程叫醒。用户线程发起 read 调用的同时注册一个回调函数,read 立即返回,等内核将数据准备好后,再调用指定的回调函数sigio完成处理。内核等待网卡数据到来,把数据从网卡拷贝到内核空间,接着把数据拷贝到用户空间,再把用户线程叫醒。用户线程read 立即返回,等内核将数据准备好后,通知用户线程。
2023-06-27 17:07:01
117
原创 DAY 43动态规划
机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。dp[i][j]:到达下标(i,j)有dp[i][j]种不同路径#### 2.dp递推公式。dp[i][j]:到达下标(i,j)有dp[i][j]种不同路径。逐行逐列,从上到下,从左到右。
2023-06-27 14:09:09
458
原创 DAY42动态规划
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。dp[i] 实际代表第 i 级台阶的水平线,即站在第 i 级台阶前还没有向上跳。F(n) = F(n - 1) + F(n - 2),其中 n > 1。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。dp[i] :有dp[i]种方法爬到第 i 级楼梯上。dp[i + 1],到达第i个台阶之上所需最低花费。dp[i]:i 对应的斐波那契数为 F(i)解释:你将从下标为 1 的台阶开始。
2023-06-26 23:27:37
183
原创 DAY64 单调栈
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。1.保证栈内由栈顶向栈底单增,这样在新元素入栈时,若新元素大于栈顶元素,则找到右侧封口元素;1.栈顶到栈底是递减的,此时,若新元素是栈顶元素右侧的凸,则其值小于栈顶元素,形成凸出;对于位置i,它参与的最大矩形,由其高度,与左右两侧第一个低于他的凸处决定。按行计算雨水大小,需要凹槽,包括最低元素和左右两侧高的元素。3.凹槽的高度,左右两侧封口的较小值减去凹槽底部高度,凸的宽度:右侧下标-左侧下标-1;
2023-06-23 21:56:21
76
原创 DAY 63单调栈day2
对于双指针方法,更新left指向元素的左侧最大值,更新right指向元素的右侧最大值。同理,对于right指向的元素,如果右侧高度更低,说明左侧肯定有比这个高度更高的柱体,所以考虑r_max,更新结果并移动right指针即可。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。② 栈顶元素<当前元素,栈顶元素右侧第一个比他大的数就是当前元素,更新栈顶元素对应的结果,重复此过程,直至满足当前元素入栈结果。
2023-06-20 20:50:39
61
原创 DAY62 单调栈day1
对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素。将nums1中元素加入unordered_map,对nums2处理时,判断是不是所求的nums1中有的元素,如果有,则进行求解,否则不必更新result。使用单增栈,且result初始化为-1,大小为nums1大小——如果不存在下一个更大元素,那么本次查询的答案是 -1。3.重复,至满足当前元素入栈条件,当前元素入栈。
2023-06-19 16:27:03
64
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人