<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wangs29的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wangs29</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wangs29]]></copyright><item><title><![CDATA[CSAPP | Lab2-Bomb Lab详细解析]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/138156587</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/138156587</guid><author>wangs29</author><pubDate>Wed, 24 Apr 2024 13:53:42 +0800</pubDate><description><![CDATA[邪恶的邪恶博士在我们班的机器上安放了大量的“二元炸弹”。二进制炸弹是一个由一系列阶段组成的程序。每个阶段都要求你在 stdin 上键入一个特定的字符串。如果你键入了正确的字符串，那么这个阶段就会被拆除，炸弹就会进入下一个阶段。否则，炸弹会通过打印“ BOOM 然后终止。当每个阶段都被拆除时，炸弹就会被拆除。我们要处理的炸弹太多了，所以我们给每个学生一个炸弹去拆除。你们的任务，你们别无选择，只能接受，就是在due date前拆除炸弹。祝你好运，欢迎加入拆弹小组！]]></description><category></category></item><item><title><![CDATA[一刷总结 | 完成比完美更重要(〃‘▽‘〃)]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/138070676</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/138070676</guid><author>wangs29</author><pubDate>Mon, 22 Apr 2024 12:41:13 +0800</pubDate><description><![CDATA[神奇的是就这么跟着一天一天地打卡居然也磕磕绊绊地完成了，中间没有任何的痛苦不适或者是难以坚持的情绪，到最开始一天两三个甚至三四个小时，到后期的一天有时候控制在一个小时内就能昨晚+写博客，刷题越来越顺畅。向来都不是一个执行里很强的人，更多的时候为知识付费也就真的只是为知识付费了，于是这一次在开始之前我就告诉自己，不管是认真完成还是稍微摸鱼一定要坚持走完这六十天。虽然我清楚地知道最开始刷的题以及知识点很多可能都记不住了， 但有了这一遍的基础之后再刷就会容易很多，之后只需要再巩固加补充就好了。]]></description><category></category></item><item><title><![CDATA[刷题DAY60 | LeetCode 84-柱状图中最大的矩形]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/138070194</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/138070194</guid><author>wangs29</author><pubDate>Mon, 22 Apr 2024 12:08:59 +0800</pubDate><description><![CDATA[给定 n 个非负整数，用来表示柱状图中各个柱子的高度。每个柱子彼此相邻，且宽度为 1。求在该柱状图中，能够勾勒出来的矩形的最大面积。]]></description><category></category></item><item><title><![CDATA[刷题DAY59 | LeetCode 503-下一个更大元素II 42-接雨水]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/138024054</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/138024054</guid><author>wangs29</author><pubDate>Sun, 21 Apr 2024 20:19:57 +0800</pubDate><description><![CDATA[给定一个循环数组 nums （ nums[nums.length - 1] 的下一个元素是 nums[0] ），返回 nums 中每个元素的 下一个更大元素。数字 x 的 下一个更大的元素 是按数组遍历顺序，这个数字之后的第一个比它更大的数，这意味着你应该循环地搜索它的下一个更大的数。如果不存在，则输出 -1。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图，计算按此排列的柱子，下雨之后能接多少雨水。]]></description><category></category></item><item><title><![CDATA[刷题DAY58 | LeetCode 739-每日温度 496-下一个更大元素 I]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137902571</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137902571</guid><author>wangs29</author><pubDate>Thu, 18 Apr 2024 08:49:35 +0800</pubDate><description><![CDATA[更直白来说，就是用一个栈来记录我们遍历过的元素，因为我们遍历数组的时候，我们不知道之前都遍历了哪些元素，以至于遍历一个元素找不到是不是之前遍历过一个更小的，所以我们需要用一个容器（这里用单调栈）来记录我们遍历过的元素。这里我们要使用递增循序（再强调一下是指从栈头到栈底的顺序），因为只有递增的时候，栈里要加入一个元素i的时候，才知道栈顶元素在数组中右面第一个比栈顶元素大的元素是i。即：如果求一个元素右边第一个更大元素，单调栈就是递增的，如果求一个元素右边第一个更小元素，单调栈就是递减的。什么时候用单调栈呢？]]></description><category></category></item><item><title><![CDATA[LeetCode刷题总结 | 图论3—并查集]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137876169</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137876169</guid><author>wangs29</author><pubDate>Wed, 17 Apr 2024 17:07:22 +0800</pubDate><description><![CDATA[并查集理论基础
1.背景
首先要知道并查集可以解决什么问题呢？
并查集常用来解决连通性问题。大白话就是当我们需要判断两个元素是否在同一个集合里的时候，我们就要想到用并查集。
并查集主要有两个功能：

将两个元素添加到一个集合中。
判断两个元素在不在同一个集合

接下来围绕并查集的这两个功能来展开讲解。
2.原理讲解
从代码层面，我们如何将两个元素添加到同一个集合中呢。
可能会想到：可以把他放到同一个数组里或者set 或者 map 中，这样就表述两个元素在同一个集合。
那么问题来了，对这些元素分门别类，可不止]]></description><category></category></item><item><title><![CDATA[LeetCode刷题总结 | 图论2—深度优先搜索&广度优先搜索较为复杂应用]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137870560</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137870560</guid><author>wangs29</author><pubDate>Wed, 17 Apr 2024 15:47:11 +0800</pubDate><description><![CDATA[计算这个岛屿的周长。当你进入一个房间，你可能会在里面找到一套不同的钥匙，每把钥匙上都有对应的房间号，即表示钥匙可以打开的房间。当然这里还有一个优化的点，就是 可以不用 visited数组，因为有mark来标记，所以遍历过的grid[i][j]是不等于1的。其实这是一个误区，大家再自己看 dfs函数的实现，其实 有visited函数记录 走过的节点，而走过的节点是不会再走第二次的。，那么整体时间复杂度 就是$ O(m^2 * n^2) $，这是一个四次方的时间复杂度，显然没有进行任何优化，大概率会超时。]]></description><category></category></item><item><title><![CDATA[LeetCode刷题总结 | 图论1—深度优先搜索&广度优先搜索&一些简单套模板问题]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137868202</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137868202</guid><author>wangs29</author><pubDate>Wed, 17 Apr 2024 13:52:18 +0800</pubDate><description><![CDATA[通常我们递归的时候，我们递归搜索需要了解哪些参数，其实也可以在写递归函数的时候，发现需要什么参数，再去补充就可以。一般情况，深搜需要二维数组数组结构保存所有路径，需要一维数组保存单一路径，这种保存结果的数组，我们可以定义一个全局变量，避免让我们的函数参数过多。]]></description><category></category></item><item><title><![CDATA[刷题DAY57 | LeetCode 647-回文子串 516-最长回文子序列]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137855804</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137855804</guid><author>wangs29</author><pubDate>Wed, 17 Apr 2024 09:28:18 +0800</pubDate><description><![CDATA[如果这矩阵是从上到下，从左到右遍历，那么会用到没有计算过的dp[i + 1][j - 1]，也就是根据不确定是不是回文的区间[i+1,j-1]，来判断了[i,j]是不是回文，那结果一定是不对的。我们在判断字符串S是否是回文，那么如果我们知道 s[1]，s[2]，s[3] 这个子串是回文的，那么只需要比较 s[0]和s[4]这两个元素是否相同，如果相同的话，这个字符串s 就是回文串。首先从递推公式中可以看出，情况三是根据dp[i + 1][j - 1]是否为true，在对dp[i][j]进行赋值true的。]]></description><category></category></item><item><title><![CDATA[刷题DAY56 | LeetCode 583-两个字符串的删除操作 72-编辑距离]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137809233</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137809233</guid><author>wangs29</author><pubDate>Tue, 16 Apr 2024 09:26:49 +0800</pubDate><description><![CDATA[基本相同，只要求出两个字符串的最长公共子序列长度即可，那么除了最长公共子序列之外的字符都是必须删除的，最后用两个字符串的总长度减去两个最长公共子序列的长度就是删除的最少步数。给定两个单词 word1 和 word2 ，返回使得 word1 和  word2 相同所需的最小步数。给你两个单词 word1 和 word2， 请返回将 word1 转换成 word2 所使用的最少操作数。每步 可以删除任意一个字符串中的一个字符。]]></description><category></category></item><item><title><![CDATA[刷题DAY55 | LeetCode 392-判断子序列 115-不同的子序列]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137772231</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137772231</guid><author>wangs29</author><pubDate>Mon, 15 Apr 2024 10:57:45 +0800</pubDate><description><![CDATA[和 dp[i][j] = dp[i - 1][j];= t[j - 1])，此时相当于t要删除元素，t如果把当前元素t[j - 1]删除，那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了，即：dp[i][j] = dp[i][j - 1];当s[i - 1] 与 t[j - 1]不相等时，dp[i][j]只有一部分组成，不用s[i - 1]来匹配（就是模拟在s中删除这个元素），即：dp[i - 1][j]所以递推公式为：dp[i][j] = dp[i - 1][j];]]></description><category></category></item><item><title><![CDATA[刷题DAY53 | LeetCode 1143-最长公共子序列 1035-不相交的线 53-最大子序和]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137696903</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137696903</guid><author>wangs29</author><pubDate>Fri, 12 Apr 2024 22:28:55 +0800</pubDate><description><![CDATA[一个字符串的 子序列 是指这样一个新的字符串：它是由原字符串在不改变字符的相对顺序的情况下删除某些字符（也可以不删除任何字符）后组成的新字符串。给定两个字符串 text1 和 text2，返回这两个字符串的最长 公共子序列 的长度。给你一个整数数组 nums ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。例如，“ace” 是 “abcde” 的子序列，但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。]]></description><category></category></item><item><title><![CDATA[刷题DAY52 | LeetCode 300-最长递增子序列 674-最长连续递增序列 718-最长重复子数组]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137676928</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137676928</guid><author>wangs29</author><pubDate>Fri, 12 Apr 2024 13:23:54 +0800</pubDate><description><![CDATA[如果定义 dp[i][j]为 以下标i为结尾的A，和以下标j 为结尾的B，那么 第一行和第一列毕竟要进行初始化，如果nums1[i] 与 nums2[0] 相同的话，对应的 dp[i][0]就要初始为1， 因为此时最长重复子数组为1。dp[i][j] ：以下标i - 1为结尾的A，和以下标j - 1为结尾的B，最长重复子数组长度为dp[i][j]。举个例子A[0]如果和B[0]相同的话，dp[1][1] = dp[0][0] + 1，只有dp[0][0]初始为0，正好符合递推公式逐步累加起来。]]></description><category></category></item><item><title><![CDATA[刷题DAY51 | LeetCode 309-最佳买卖股票时机含冷冻期 714-买卖股票的最佳时机含手续费]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137675026</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137675026</guid><author>wangs29</author><pubDate>Fri, 12 Apr 2024 11:57:53 +0800</pubDate><description><![CDATA[如果i为1，第1天买入股票，那么递归公式中需要计算 dp[i - 1][1] - prices[i] ，即 dp[0][1] - prices[1]，那么 dp[0][1] （即第0天的状态二）只能初始为0。那么dp[i][0] = max(dp[i - 1][0], dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i]);整数 fee 代表了交易股票的手续费用。今天卖出了股票（状态三），同上分析，dp[0][2]初始化为0，dp[0][3]也初始为0。]]></description><category></category></item><item><title><![CDATA[刷题DAY50 | LeetCode 123-买卖股票的最佳时机III 188-买卖股票的最佳时机IV]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137590021</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137590021</guid><author>wangs29</author><pubDate>Wed, 10 Apr 2024 12:23:14 +0800</pubDate><description><![CDATA[例如 dp[i][1] ，并不是说 第i天一定买入股票，有可能 第 i-1天 就买入了，那么 dp[i][1] 延续买入股票的这个状态。一定是选最大的，所以 dp[i][1] = max(dp[i-1][0] - prices[i], dp[i - 1][1]);所以dp[i][2] = max(dp[i - 1][1] + prices[i], dp[i - 1][2])你最多可以完成 k 笔交易。那么dp[i][1]究竟选 dp[i-1][0] - prices[i]，还是dp[i - 1][1]呢？]]></description><category></category></item><item><title><![CDATA[刷题DAY49 | LeetCode 121-买卖股票的最佳时机 122-买卖股票的最佳时机II]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137560959</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137560959</guid><author>wangs29</author><pubDate>Tue, 09 Apr 2024 17:41:32 +0800</pubDate><description><![CDATA[那么第i天持有股票即dp[i][0]，如果是第i天买入股票，所得现金就是昨天不持有股票的所得现金 减去 今天的股票价格 即：dp[i - 1][1] - prices[i]。同样dp[i][1]取最大的，dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);那么dp[i][0]应该选所得现金最大的，所以dp[i][0] = max(dp[i - 1][0], -prices[i]);注意这里说的是“持有”，“持有”不代表就是当天“买入”！]]></description><category></category></item><item><title><![CDATA[刷题DAY48 | LeetCode 198-打家劫舍 213-打家劫舍II 337-打家劫舍III]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137499275</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137499275</guid><author>wangs29</author><pubDate>Mon, 08 Apr 2024 10:49:48 +0800</pubDate><description><![CDATA[同时，相邻的房屋装有相互连通的防盗系统，如果两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警。你是一个专业的小偷，计划偷窃沿街的房屋。每间房内都藏有一定的现金，影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统，如果两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组，计算你 不触动警报装置的情况下 ，一夜之内能够偷窃到的最高金额。给定一个代表每个房屋存放金额的非负整数数组，计算你 在不触动警报装置的情况下 ，今晚能够偷窃到的最高金额。]]></description><category></category></item><item><title><![CDATA[刷题DAY46 | LeetCode 139-单词拆分 多重背包问题]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137452368</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137452368</guid><author>wangs29</author><pubDate>Sun, 07 Apr 2024 09:55:53 +0800</pubDate><description><![CDATA[现在有 N 种不同类型的矿石，每种矿石有一个重量 w[i]，一个价值 v[i]，以及最多 k[i] 个可用。对于多重背包，有N种物品和一个容量为V 的背包。求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量，且价值总和最大。在这个行星上，有许多不同类型的矿石资源，每种矿石都有不同的重要性和价值。如果物品数量很多的话，C++中，这种操作十分费时，主要消耗在vector的动态底层扩容上。输入共包括四行，第一行包含两个整数 C 和 N，分别表示宇航舱的容量和矿石的种类数量。背包最大重量为10。]]></description><category></category></item><item><title><![CDATA[刷题DAY45 | 70-爬楼梯（进阶） LeetCode 322-零钱兑换 279-完全平方数]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137435516</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137435516</guid><author>wangs29</author><pubDate>Sat, 06 Apr 2024 19:19:47 +0800</pubDate><description><![CDATA[完全平方数 是一个整数，其值等于另一个整数的平方；换句话说，其值等于一个整数自乘的积。例如，1、4、9 和 16 都是完全平方数，而 3 和 11 不是。计算并返回可以凑成总金额所需的 最少的硬币个数。给你一个整数数组 coins ，表示不同面额的硬币；以及一个整数 amount ，表示总金额。每次你可以爬至多m (1 <= m < n)个台阶。给你一个整数 n ，返回 和为 n 的完全平方数的最少数量。需要 n 阶你才能到达楼顶。输出一个整数，表示爬到楼顶的方法数。你可以认为每种硬币的数量是无限的。]]></description><category></category></item><item><title><![CDATA[刷题DAY44 | 完全背包问题 LeetCode 518-零钱兑换 II 377-组合总和 Ⅳ]]></title><link>https://blog.youkuaiyun.com/wangs29/article/details/137371372</link><guid>https://blog.youkuaiyun.com/wangs29/article/details/137371372</guid><author>wangs29</author><pubDate>Thu, 04 Apr 2024 12:12:19 +0800</pubDate><description><![CDATA[有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]，得到的价值是value[i]。每件物品都有无限个（也就是可以放入背包多次），求解将哪些物品装入背包里物品价值总和最大。依然举这个例子：背包最大重量为4。问背包能背的物品最大价值是多少？和完全背包唯一不同就是体现在遍历顺序上回顾一下01背包的核心代码我们知道01背包内嵌的循环是从大到小遍历，为了保证每个物品仅被添加一次。]]></description><category></category></item></channel></rss>