<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Zison_Chen的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Zison_Chen</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Zison_Chen]]></copyright><item><title><![CDATA[day46 代码随想录 单调栈难题 面试高频题]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141848100</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141848100</guid><author>Zison_Chen</author><pubDate>Tue, 03 Sep 2024 10:57:23 +0800</pubDate><description><![CDATA[这就回到了我们单调栈的范围了。此时栈中的栈顶元素就是凹槽的左边位置，而当前遍历的元素就是凹槽的右边位置，此时我们就可以通过这三个元素来进行体积的计算。另外，我们对这个的求法是，对于当前遍历到的柱子，我们是要求它左边的最大元素，还有右边的最大元素。首先对于矩阵求面积，单个矩阵也可以是面积，如果有跨度，那么其实两个矩阵之间高度最小的矩阵作为高度，矩阵之间的下标差作为宽度，这样来计算面积。如果我们按照列进行计算结雨水，我们需要知道当前柱子中左边柱子的最高高度和右边柱子的最高高度，就可以计算当前位置的雨水面积。]]></description><category></category></item><item><title><![CDATA[day45 代码随想录 | 单调栈考点]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141823186</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141823186</guid><author>Zison_Chen</author><pubDate>Mon, 02 Sep 2024 17:18:38 +0800</pubDate><description><![CDATA[因为只有递增的时候，栈里要加入一个元素i的时候，才知道栈顶元素在数组中右面第一个比栈顶元素大的元素是i。即：如果求一个元素右边第一个更大元素，单调栈就是递增的，如果求一个元素右边第一个更小元素，单调栈就是递减的。给定一个循环数组（最后一个元素的下一个元素是数组的第一个元素），输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序，这个数字之后的第一个比它更大的数，这意味着你应该循环地搜索它的下一个更大的数。如果不存在，对应位置输出 -1。2. 单调栈里面的元素是递增的，还是递减的？]]></description><category></category></item><item><title><![CDATA[day 44 代码随想录 | 回文串个数 最长回文字串 最长回文子序列]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141672367</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141672367</guid><author>Zison_Chen</author><pubDate>Thu, 29 Aug 2024 11:14:21 +0800</pubDate><description><![CDATA[我们在判断字符串S是否是回文，那么如果我们知道 s[1]，s[2]，s[3] 这个子串是回文的，那么只需要比较 s[0]和s[4]这两个元素是否相同，如果相同的话，这个字符串s 就是回文串。因此，我们的dp数组是二维的。布尔类型的dp[i][j]：表示区间范围[i,j] （注意是左闭右闭）的子串是否是回文子串，如果是dp[i][j]为true，否则为false。说明s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子序列的长度，那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列。]]></description><category></category></item><item><title><![CDATA[day43 代码随想录 | 动态规划 大BOSS 子序列到编辑距离]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141635460</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141635460</guid><author>Zison_Chen</author><pubDate>Wed, 28 Aug 2024 13:52:21 +0800</pubDate><description><![CDATA[给定字符串 s 和 t ，判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些（也可以不删除）字符而不改变剩余字符相对位置形成的新字符串。（例如，"ace"是"abcde"的一个子序列，而"aec"不是）。这个题是一个简单题，可以用双指针，也可以动态规划，也是入门编辑距离的入门题，只涉及删除操作。双指针一个指针指向s 一个指针指向t   t指针一个移动，s指针如果遇到相等就移动如果s指针能移动到末尾，说明就可以了动态规划1. dp数组定义使用二维dp数组。]]></description><category></category></item><item><title><![CDATA[day42 代码随想录 | 子序列问题 面试高频题]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141601043</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141601043</guid><author>Zison_Chen</author><pubDate>Tue, 27 Aug 2024 14:28:36 +0800</pubDate><description><![CDATA[如果不相等 就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列，取最大的。举个例子A[0]如果和B[0]相同的话，dp[1][1] = dp[0][0] + 1，只有dp[0][0]初始为0，正好符合递推公式逐步累加起来。但dp[i][0] 和dp[0][j]要初始值，因为 为了方便递归公式dp[i][j] = dp[i - 1][j - 1] + 1;注意这个题是子序列，并不要求连续。]]></description><category></category></item><item><title><![CDATA[day41 代码随想录 | 股票买卖的最佳时机]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141556617</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141556617</guid><author>Zison_Chen</author><pubDate>Mon, 26 Aug 2024 10:44:48 +0800</pubDate><description><![CDATA[dp[i][1] = max(dp[i-1][1], prices[i] + dp[i-1][0]) 要么第i天不交易，第i天交易的化就需要减去前面i-1买入的价格。一定是选最大的，所以 dp[i][1] = max(dp[i-1][0] - prices[i], dp[i - 1][1]);那么dp[i][1]究竟选 dp[i-1][0] - prices[i]，还是dp[i - 1][1]呢？dp[i][1] 代表第i天不持有股票，说明卖了，可以是第i天卖的，也可使第i-1天。]]></description><category></category></item><item><title><![CDATA[day 39 代码随想录 | 打家劫舍 动态规划]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141535776</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141535776</guid><author>Zison_Chen</author><pubDate>Sun, 25 Aug 2024 22:25:35 +0800</pubDate><description><![CDATA[你是一个专业的小偷，计划偷窃沿街的房屋，每间房内都藏有一定的现金。同时，相邻的房屋装有相互连通的防盗系统，如果两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警。如果不偷当前节点，那么左右孩子就可以偷，至于到底偷不偷一定是选一个最大的，所以：val2 = max(left[0], left[1]) + max(right[0], right[1]);每间房内都藏有一定的现金，影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统，如果两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警。]]></description><category></category></item><item><title><![CDATA[day38 代码随想录 | 动态规划 完全背包问题 零钱兑换 完全平方数 单词拆分]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141459108</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141459108</guid><author>Zison_Chen</author><pubDate>Fri, 23 Aug 2024 10:49:45 +0800</pubDate><description><![CDATA[dp[j] = min(dp[j], dp[j-coins[i]]+1) 啥意思呢，其实要么我用当前，要么我减去一个币值 然后+1。dp[j] = dp[j] or dp[j-len(s[j:i]) and s[j:i] == word] word就是dict。如果dp[j]为true，且[j, i]这个区间的字串在dic种出现过，那么dp[i]就为true了。但是dp[0] 不能为infinite，dp[0] 应该赋值为0，也好理解，我不需要硬币嘛。n就是我们的背包容量，物品就是小于n的完全平方数。]]></description><category></category></item><item><title><![CDATA[day37 代码随想录 | 完全背包问题 组合总和 II 零钱兑换II 爬楼梯（进阶版）]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141426485</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141426485</guid><author>Zison_Chen</author><pubDate>Thu, 22 Aug 2024 14:16:02 +0800</pubDate><description><![CDATA[首先dp[0]一定要为1，dp[0] = 1是 递归公式的基础。当 m = 2，n = 3 时，n = 3 这表示一共有三个台阶，m = 2 代表你每次可以爬一个台阶或者两个台阶。第i件物品的重量是weight[i]，得到的价值是value[i]。如果物品是内循环，容量是外循环，那么你就是将  2 2 1 和 1 2 2 当初两种不同的方式。完全背包问题是在0-1背包问题的上的基础得来的，区别在于在于物品可以无限制的重复选择。如果物品是内循环，算的是排列数，背包的每一个值，都会过物品。]]></description><category></category></item><item><title><![CDATA[day36 代码随想录 | 动态规划 目标和 一和零]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141391261</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141391261</guid><author>Zison_Chen</author><pubDate>Wed, 21 Aug 2024 15:10:46 +0800</pubDate><description><![CDATA[所以递推公式：dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);dp[j] += dp[j-nums[i]] 这是个累加公式，即dp[3] = dp[2]  + dp[1] 我们是用累加。最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ，因此答案是 4。dp[i][j] 就可以是 dp[i - zeroNum][j - oneNum] + 1。我们要求的是，如果要装满left大小的背包，]]></description><category></category></item><item><title><![CDATA[day 35 代码随想录 | 0-1背包问题 分割等和子集 最后一块石头的重量II]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141352355</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141352355</guid><author>Zison_Chen</author><pubDate>Tue, 20 Aug 2024 13:33:30 +0800</pubDate><description><![CDATA[由dp[i - 1][j - weight[i]]推出，dp[i - 1][j - weight[i]] 为背包容量为j - weight[i]的时候不放物品i的最大价值，那么dp[i - 1][j - weight[i]] + value[i] （物品i的价值），就是背包放物品i得到的最大价值。在使用二维数组的时候，递推公式：dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);在0-1背包问题中，都可以遍历，在二维数组中。]]></description><category></category></item><item><title><![CDATA[day34 代码随想录 | 不同路径 整数拆分]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141316917</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141316917</guid><author>Zison_Chen</author><pubDate>Mon, 19 Aug 2024 10:55:48 +0800</pubDate><description><![CDATA[dp[i] 拆分 假设我们进行遍历从1到j j是小于i//2 + 1的，那么得到值可以是j*(i-j) 表明拆分为两个数，那么如果拆分多个，则是j * dp[i-j]  我们需要从这里面选择最大的。你走到dp[i][j] 要么从dp[i-1][j] 向下移动一步 要么从dp[i][j-1]向右一步。因此dp[i][j] = dp[i-1][j] + dp[i][j-1]dp[i][j]就是代表从(0,0）到[i,j]的路径数量。首先，dp[i][j] 就是障碍，那么其实dp[i][j] 就是应该为0。]]></description><category></category></item><item><title><![CDATA[day32 代码对象录 | 动态规划 斐波拉契 爬楼梯]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141299439</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141299439</guid><author>Zison_Chen</author><pubDate>Sun, 18 Aug 2024 14:47:08 +0800</pubDate><description><![CDATA[首先，你走到每一步，不外部是前一步走一步到的，或者前一步走两步到的。因为，你到当前步的方数数量就等于dp[i-1] 走一步 加上dp[i-2]走两步的方法数。即dp[i] = dp[i-2] + dp[i-1]3. dp初始化，因为刚开始第一步和第二步楼梯可以初始化为0 dp[0] = 0, dp[1] = 0,因为我还没开始爬。3. 初始化.dp[1] = 1 dp[2] = 1. dp[0] 不用赋值，没有意义。这里dp[i]的每个值就是F(i)的值，递推公司已经给了，初始化也给了。]]></description><category></category></item><item><title><![CDATA[day31 代码随想录 | 单调递增的数字 和 贪心总结]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141262272</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141262272</guid><author>Zison_Chen</author><pubDate>Fri, 16 Aug 2024 16:23:09 +0800</pubDate><description><![CDATA[感觉就是没有规律。有些简单得贪心你很容易想到思路有些是就是想不到。多练习 多刷特别是最大子序和。]]></description><category></category></item><item><title><![CDATA[day30 代码随想录 | 射气球 无重叠区间 划分字母区间 合并区间]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141215626</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141215626</guid><author>Zison_Chen</author><pubDate>Thu, 15 Aug 2024 11:19:06 +0800</pubDate><description><![CDATA[说明已经重叠了，我们不需要加箭，但是，此时，我们要更新右边界，我们是找最小的两者右边界，如果不找最小，那么就超过了，你就一个箭射一个求。气球的直径大小就是区间的跨度。核心就是你要找到非重叠的区间范围，遇到非重叠，你就得加箭来射。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的，因为划分的片段数较少。看下一个右区间是否重叠，如果重叠，我们取最小的右边界。这就需要右排序，如果右边的区间小于下一个左边的区间，说明没有重叠。第二种思路，计算非重叠区间，用总区间减去重叠区间。]]></description><category></category></item><item><title><![CDATA[day29 代码随想录 | 加油站 分发糖果 找零 根据身高重建队列]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141185409</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141185409</guid><author>Zison_Chen</author><pubDate>Wed, 14 Aug 2024 13:51:36 +0800</pubDate><description><![CDATA[在一条环路上有n个加油站，其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车，从第i个加油站开往第i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发，开始时油箱为空。给定两个整数数组gas和cost，如果你可以按顺序绕环路行驶一周，则返回出发时加油站的编号，否则返回-1。如果存在解，则它是的。这个题呢，我一来都没有想到用暴力法，直接用贪心了。但是我发现我自己暴力法好像都写不出来，因为是环形的。]]></description><category></category></item><item><title><![CDATA[day28 代码随想录 | 贪心 买卖股票 跳跃游戏 K次取反]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141164725</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141164725</guid><author>Zison_Chen</author><pubDate>Tue, 13 Aug 2024 15:39:16 +0800</pubDate><description><![CDATA[随后，在第 4 天（股票价格 = 3）的时候买入，在第 5 天（股票价格 = 6）的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 2 天（股票价格 = 1）的时候买入，在第 3 天（股票价格 = 5）的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。这个题怎么用到贪心的思想呢，我们来看最大覆盖范围，如果覆盖范围覆盖了整个数组，就可以。这个题很简单，我们肯定想的就是先转换负数，如果还有次数，我们就转换最小的数。如果负数转换完了，还有次数，且转换完负数的k是奇数，我们减去最小的数！]]></description><category></category></item><item><title><![CDATA[day27 代码随想录 | 贪心算法 分发饼干 摆动序列 最大子数组和]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141126056</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141126056</guid><author>Zison_Chen</author><pubDate>Mon, 12 Aug 2024 13:40:19 +0800</pubDate><description><![CDATA[1. 如果有重复元素呢，比如1，2，2，2，1。你的指针改怎么移动和判断呢，我们会得到1和2的差值是1 最后一个2和1的差值是-1，但是你指针应该怎么动，当我们遍历到i=1的时候， nums[i] - nums[i-1] = 1 那么后面 i+1-nums[i] = 0 你需要移动i,直到 最后i为最后，你需要保存你之前的那个1的差值，即pre_gap, 然后拿到你的cur_gap进行比较，但是在这之间，cur_gap是等于0的，你不能直接跳过重开，仍需要记录。假设是2，2，5，最终的result为2。]]></description><category></category></item><item><title><![CDATA[day25 代码随想录 | 非递减子序列 全排列]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141088196</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141088196</guid><author>Zison_Chen</author><pubDate>Sat, 10 Aug 2024 11:56:32 +0800</pubDate><description><![CDATA[我们可以用一个set 来保存已经加入过的元素，后面如果继续遍历到，那么就直接跳过，这是对每一层而言，因此在进入for backtracking之前进行初始化，在for循环后面加，保证是在同一层！上面以4767为例做的树状图，还是去重，在同层的问题，同一父节点下，不能再重复使用相同元素。一种错误的想法是1,2 1,3 2,3 123,这是错误的，第一个1可以跟后面的1配对得到1,1 和1,1,1。有重复元素，关键还是在如何去重，对于相同的元素，对于同层而言，必须去重。去重的树状示意图如上所示，跟组合很像。]]></description><category></category></item><item><title><![CDATA[day24 代码随想录 | 复原ip 地址 子集问题]]></title><link>https://blog.youkuaiyun.com/Zison_Chen/article/details/141062682</link><guid>https://blog.youkuaiyun.com/Zison_Chen/article/details/141062682</guid><author>Zison_Chen</author><pubDate>Fri, 09 Aug 2024 15:53:07 +0800</pubDate><description><![CDATA[正好由四个整数（每个整数位于0到255之间组成，且不能含有前导0），整数之间用'.'分隔。给定一个只包含数字的字符串s，用以表示一个 IP 地址，返回所有可能的，这些地址可以通过在s中插入'.'来形成。你重新排序或删除s中的任何数字。你可以按顺序返回答案。这个题和切割字符串相似，只不过判断条件不一样。而且我们切割中止都是切割到末尾就可以结束了。此外，从题目的要求可以看到 s的长度应该在4-12之间，小于或大于这个长度就不可能完成满足条件的ip地址回溯三部曲1. 回溯参数。]]></description><category></category></item></channel></rss>