<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[L_H21的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/L_H21</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; L_H21]]></copyright><item><title><![CDATA[技巧----5.寻找重复数]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150768497</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150768497</guid><author>L_H21</author><pubDate>Mon, 25 Aug 2025 14:06:36 +0800</pubDate><description><![CDATA[将这几个元素一次串起来形成一个链表: 1-->3-->2-->4-->2-->4-->2.....,该链表会存在一个环,环的入口即为重复的元素。快指针两步/次 慢指针一步/次 相对速度为1 快指针必然和慢指针相遇,不会跳过慢指针。当快慢指针在环内相遇时,再从起点出发一个慢指针,两慢指针相遇点必然是环入口点。例[1,3,4,2,2]]]></description><category></category></item><item><title><![CDATA[技巧----4.下一个排列]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150768408</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150768408</guid><author>L_H21</author><pubDate>Mon, 25 Aug 2025 14:05:13 +0800</pubDate><description><![CDATA[从末位开始向前遍历(实际上是末位的前一个元素),找到第一个满足nums[i] < nums[i + 1]的元素i;将i以后的元素进行翻转,也就是翻转[i + 1,nums.length - 1];后面原本是降序,反转后变为升序,完全实现最小幅度的增大。再次从末位向前遍历,找到第一个满足nums[j] > nums[i]的元素j,并将i与j交换;即最小幅度的增大(不完全)下一个排列:高位尽量不变,低位通过调整实现最小幅度的增大,若原本就是递减排序(无法再增大)则直接将其逆序转变为升序排列。]]></description><category></category></item><item><title><![CDATA[技巧----3.颜色分类]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150768311</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150768311</guid><author>L_H21</author><pubDate>Mon, 25 Aug 2025 14:03:24 +0800</pubDate><description><![CDATA[若nums[i] == 0,则将nums[i]与nums[left]交换,再迭代i与left即可;即将小于基准的置于左边。若nums[i] == 2,则将nums[i]与nums[right]交换,再迭代right即可;即,与三路快排思想类似将数组分为三个区域,基准为1,小于基准的放左边,等于基准的放中间,大于基准的放右边。若nums[i] == 1,则无需处理,迭代i即可;最终状态:[0,L)-->0;[L,i)-->1;定义三个指针,left、right置于数组两端,i用于遍历数组。]]></description><category></category></item><item><title><![CDATA[技巧----2.多数元素]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150768256</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150768256</guid><author>L_H21</author><pubDate>Mon, 25 Aug 2025 13:59:52 +0800</pubDate><description><![CDATA[遍历数组,记录遍历到的元素res,迭代count遇到相同的元素count++,遇到不同的元素count--若count已经为0,又遇到了不同元素,则重置res与count;遍历结束返回res即为多数元素。定义一个count与res;res记录多数元素,count记录该元素出现次数(并非真实次数)摩尔投票只能在确定有多数元素时才能使用。]]></description><category></category></item><item><title><![CDATA[技巧----1.只出现一次的数字]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150768223</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150768223</guid><author>L_H21</author><pubDate>Mon, 25 Aug 2025 13:58:13 +0800</pubDate><description><![CDATA[异或运算,对于任何一个整数与他本身异或结果为0,与0异或结果为他本身;且异或运算满足交换率,异或顺序改变结果不变。则只需要遍历数组,任选一个元素与其他元素依次异或即可。]]></description><category></category></item><item><title><![CDATA[二维动态规划----5.编辑距离]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150768142</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150768142</guid><author>L_H21</author><pubDate>Mon, 25 Aug 2025 13:55:02 +0800</pubDate><description><![CDATA[若在S1末尾(当前处理到的末尾)插入S2[j]:则此时S1、S2末尾元素i相同,退化至相等的情况,再各自向前推一个元素即可,由于S1末尾插入元素,向前推还是i。则minOps[i][j] = 1 + minOps[i - 1][j - 1] 即替换操作 + S1、S2各自向前推一个字符对应的状态。若S1[i] == S2[j],则minOps[i][j] = minOps[i - 1][j - 1],minOps[i][j]:代表S1与S2分别以i、j结尾(长度),将S1替换为S2需要的最少操作步骤。]]></description><category></category></item><item><title><![CDATA[二维动态规划----4.最长公共子序列]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150768081</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150768081</guid><author>L_H21</author><pubDate>Mon, 25 Aug 2025 13:53:20 +0800</pubDate><description><![CDATA[即当前两字符不相等,LCS[i][j]则完全取决于在此之前的字符,两串分别舍去一个字符取最大,即在LCS[i - 1][j],LCS[i][j - 1]中挑选最大的。= S2[j],则LCS[i][j] = Math.max(LCS[i - 1][j],LCS[i][j - 1])若S1[i] == S2[j],则LCS[i][j] = 1 + LCS[i - 1][j - 1],LCS[i][j]:代表S1以i(长度)结尾和S2以j(长度)结尾的最长公共子序列的长度()]]></description><category></category></item><item><title><![CDATA[二维动态规划----3.最长回文子串]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150767924</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150767924</guid><author>L_H21</author><pubDate>Mon, 25 Aug 2025 13:51:23 +0800</pubDate><description><![CDATA[注,回文子串长度可能是奇数也可能是偶数,枚举时奇数情况(从同一个点开始扩散) 与 偶数情况(从两个相邻的点开始扩散)需要同时扩散。从0开始枚举,假设每个元素都是一个回文子串的中心,向两遍扩散(单独一个字符是长度为1的回文子串)回文子串特点:中心对称,从中间出发向两端扩散,对比两指针指向的元素是否相同。]]></description><category></category></item><item><title><![CDATA[二维动态规划----2.最小路径和]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150580135</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150580135</guid><author>L_H21</author><pubDate>Thu, 21 Aug 2025 12:10:37 +0800</pubDate><description><![CDATA[(i,j):(i - 1,j)向下 或 (i,j - 1)向右 minPathSum[i][j] = Math.min(minPathSum[i- 1][j],minPathSum[i][j - 1]) + grid[i][j](1,1):(0,1)向下 或 (1,0)向右 minPathSum[1][1] = Math.min(minPathSum[0][1],minPathSum[1][0]) + grid[1][1]minPathSum[i][j]:到达(i,j)的最小路径和。]]></description><category></category></item><item><title><![CDATA[二维动态规划----1.不同路径]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150580104</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150580104</guid><author>L_H21</author><pubDate>Thu, 21 Aug 2025 12:08:46 +0800</pubDate><description><![CDATA[pathCount[i][j] == pathCount[i - 1][j] + pathCount[i][j - 1]pathCount[1][1] = pathCount[0][1] + pathCount[1][0]pathCount[1][2] = pathCount[0][2] + pathCount[1][1]对于第0行的所有元素其只能通过向右移动到达,即pathCount[0][j] = 1。对于第0列的所有元素其只能通过向下移动到达,即pathCount[i][0] = 1。]]></description><category></category></item><item><title><![CDATA[动态规划----10.最长有效括号]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150580031</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150580031</guid><author>L_H21</author><pubDate>Thu, 21 Aug 2025 12:06:38 +0800</pubDate><description><![CDATA[以下标i结尾:validLen[i]--> if(s[i] == ')') --> if(s[i - 1] == ')') --> if(s[i - validLen[i - 1] - 1] == '('])以下标i结尾:validLen[i]--> if(s[i] == ')') --> if(s[i - 1] == '(') --> validLen[i] == 2 + validLen[i - 2]validLen[]:有效长度,validLen[i]代表,以下标i结尾时连续有效括号长度。]]></description><category></category></item><item><title><![CDATA[动态规划----9.分割等和子集]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150579989</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150579989</guid><author>L_H21</author><pubDate>Thu, 21 Aug 2025 12:01:19 +0800</pubDate><description><![CDATA[那么此时canMake[2]为true,当canMake[4]时,发现canMake[2] = true,且num = 2,那么会误认为canMake[4] = true。实际上num = 2,即面额为2的纸币在canMake[2]时已经使用过一次了,canMake[4]为false才对,正序遍历导致重复使用故而不能正序遍历。canMake[i] = canMake[i] || canMake[i - num],在凑目标值时,当前num要么使用,要么不使用。]]></description><category></category></item><item><title><![CDATA[动态规划----8.乘积最大子数组]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150563979</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150563979</guid><author>L_H21</author><pubDate>Wed, 20 Aug 2025 23:05:52 +0800</pubDate><description><![CDATA[maxProduct、minProduct 当前最大、最小乘积 res记录结果。注意,乘上一个负数会让小的变大,大的变小,保存max的同时min也需要保存。]]></description><category></category></item><item><title><![CDATA[动态规划----7.最长递增子序列]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150563939</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150563939</guid><author>L_H21</author><pubDate>Wed, 20 Aug 2025 23:01:13 +0800</pubDate><description><![CDATA[以下标为i结尾:maxSubseq[i]---> if(nums[i] > nums[0...i-1]) ---> Math.max(maxSubseq[0...i-1] + 1 )以下标为3结尾:maxSubseq[3]---> if(nums[3] > nums[0,1,2]) ---> Math.max(maxSubseq[0,1,2] + 1 )以下标为1结尾:maxSubseq[1]---> if(nums[1] > nums[0]) ---> maxSubseq[0] + 1。]]></description><category></category></item><item><title><![CDATA[动态规划----6.单词拆分]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150563917</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150563917</guid><author>L_H21</author><pubDate>Wed, 20 Aug 2025 22:59:00 +0800</pubDate><description><![CDATA[当前前1个字符组成的单词足够匹配wordDict中的单词(1 >= len) 且前1 - len个字符构成的单词在wordDict中存在(s[0,1-len)) 且当前[1-len,1)的len个单词在wordDict是否存在。当前前i个字符组成的单词足够匹配wordDict中的单词(i >= len) 且前i - len个字符构成的单词在wordDict中存在(s[0,i-len)) 且当前[i-len,i)的len个单词在wordDict是否存在。其余通过后续递推更改状态。]]></description><category></category></item><item><title><![CDATA[动态规划----5.零钱兑换]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150531113</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150531113</guid><author>L_H21</author><pubDate>Tue, 19 Aug 2025 17:40:13 +0800</pubDate><description><![CDATA[凑出为2的金额:Math.min(minCoins[2],minCoins[2 - coin:coins] + 1) 直接用面值2(有的话) 或先直接用一张小于等于2的面额,再加上凑出minCoins[2 - coin:coins]需要的硬币数。凑出为i的金额:Math.min(minCoins[i],minCoins[i - coin:coins] + 1) 直接用面值i(有的话) 或先直接用一张小于等于i的面额,再加上凑出minCoins[i - coin:coins]需要的硬币数。]]></description><category></category></item><item><title><![CDATA[动态规划----4.完全平方数]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150531059</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150531059</guid><author>L_H21</author><pubDate>Tue, 19 Aug 2025 17:38:31 +0800</pubDate><description><![CDATA[凑出为i的完全平方数:Math.min(minNums[i],minNums[i - num:nums] + 1) 直接用元素i(有的话) 或先直接用一个小于等于i的元素,再加上凑出minNums[i - num:nums]需要的元素数。凑出为2的元素数:Math.min(minNums[2],minNums[2 - num:nums] + 1) 直接用元素2(有的话) 或先直接用一个小于等于2的元素,再加上凑出minNums[2 - num:nums]需要的元素数。]]></description><category></category></item><item><title><![CDATA[动态规划----3.打家劫舍]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150494171</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150494171</guid><author>L_H21</author><pubDate>Mon, 18 Aug 2025 15:46:49 +0800</pubDate><description><![CDATA[偷到第i个房间  maxRob[i]: Math.max(maxRob[i - 2] + nums[i],maxRob[i - 1]) 若偷i - 2,则maxRob[i - 2] + nums[i](偷i - 2可偷i) 若偷i - 1,则maxRob[i - 1](偷i - 1不可偷i)偷到第1个房间: maxRob[1]: Math.max(nums[0],nums[1]) (不能连着偷两个,必然是前两个中最大的) 要么偷0,要么偷1,偷最大的那个。只能间隔一个房间再偷(从0开始计算)]]></description><category></category></item><item><title><![CDATA[动态规划----2.杨辉三角]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150494059</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150494059</guid><author>L_H21</author><pubDate>Mon, 18 Aug 2025 15:42:59 +0800</pubDate><description><![CDATA[每行元素个数:i+1;元素值:[i-1][j-1] + [i-1][j]]]></description><category></category></item><item><title><![CDATA[动态规划----1.爬楼梯]]></title><link>https://blog.youkuaiyun.com/L_H21/article/details/150291312</link><guid>https://blog.youkuaiyun.com/L_H21/article/details/150291312</guid><author>L_H21</author><pubDate>Tue, 12 Aug 2025 22:16:35 +0800</pubDate><description><![CDATA[3阶:由1阶迈2步,或2阶迈一步;4阶:由2阶迈2步,或3阶1步;n阶:由n-2阶迈2步,或n-1阶迈1步。1阶:1步,即1种;2阶:1步+1步或直接2步,即2种。]]></description><category></category></item></channel></rss>