<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lll2034006613的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lll2034006613</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lll2034006613]]></copyright><item><title><![CDATA[leetcode 热题 100_两两交换链表中的节点]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136725415</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136725415</guid><author>lll2034006613</author><pubDate>Fri, 15 Mar 2024 00:14:53 +0800</pubDate><description><![CDATA[递归：将链表节点传入递归函数，如果节点位于链表尾部且无需交换则直接返回，否则将该节点和其下一节点交换并调用递归函数。迭代：设置节点指针存储结果，遍历链表，直接修改节点的指向。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_删除链表的倒数第 N 个结点]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136694066</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136694066</guid><author>lll2034006613</author><pubDate>Wed, 13 Mar 2024 22:59:09 +0800</pubDate><description><![CDATA[递归：利用递归栈逆向遍历链表，并用全局变量记录当前遍历的是倒数第几位节点，当遍历到待删节点的上一位节点时，需要注意当删除的是头节点时，直接。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_两数相加]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136693565</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136693565</guid><author>lll2034006613</author><pubDate>Wed, 13 Mar 2024 22:30:30 +0800</pubDate><description><![CDATA[迭代：首先判断整数0，然后分别遍历两段链表，将对应位数的值相加并存入新链表，再遍历新链表，将节点值val>=10的减10，并且其下一节点值val+=1。需要注意最后一位节点进位是将下一位节点值设置为1。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_合并两个有序链表]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136666443</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136666443</guid><author>lll2034006613</author><pubDate>Wed, 13 Mar 2024 00:09:17 +0800</pubDate><description><![CDATA[递归：将迭代的过程通过递归来实现，但由于递归核心代码是从链表末端开始执行的，所以无需考虑链表节点的覆盖问题，不容易出错，但递归也较难理解。迭代：分别用两个指针遍历两段链表，逐步比较两链表的节点，将值较大的节点存入新链表，同时指针移动，直到某段链表遍历结束，将另一段链表剩余的节点存入新链表。作为参数递归调用，并将较大的节点作为返回值。指向下一节点，这里下一节点可能是和它比较的节点。，具体要进行下一步比较，所以我们将节点。再比较传入的两节点值（记做节点。来存避免新链表指针出错。，或者它原先的下一节点。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_环形链表 II]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136665425</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136665425</guid><author>lll2034006613</author><pubDate>Tue, 12 Mar 2024 22:59:47 +0800</pubDate><description><![CDATA[哈希表：遍历链表，用哈希表存储遍历过的链表节点，判断链表节点是否在哈希表中存在，如果存在说明链表出现过，第一个重复出现的节点即为开始入环的第一个节点。快慢指针：用一快一慢的双指针遍历链表，如果指针不相遇则说明不存在环形结构，如果相遇则存在环形结构。第一次相遇时，快指针走过的路程是慢指针的两倍。表示在环形走走了若干圈还是回到环形开始节点），所以此时慢指针再走。步就会到达环形开始节点。从链表开始的某个指针要到达环形开始节点处，需要走。，快指针相比慢指针多走了若干圈环形结构。步后到达环形开始节点，与慢指针相遇。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_环形链表]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136636975</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136636975</guid><author>lll2034006613</author><pubDate>Mon, 11 Mar 2024 22:25:08 +0800</pubDate><description><![CDATA[快慢指针：用两个移动速度一快一满的指针遍历链表，如果链表中不存在环形结构，则快指针会保持领先，并且先到达末尾；而如果链表中存在环形结构，则快指针会先进入环形结构，并且在环形结构中某一节点和慢指针相遇。附上官方的演示动画（来源。哈希表：遍历链表，如果哈希表中出现过该节点说明存在环形结构，否则将节点写入哈希表。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_旋转图像]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136636617</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136636617</guid><author>lll2034006613</author><pubDate>Mon, 11 Mar 2024 22:01:11 +0800</pubDate><description><![CDATA[翻转数组：先将数组沿。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_螺旋矩阵]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136635632</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136635632</guid><author>lll2034006613</author><pubDate>Mon, 11 Mar 2024 21:42:06 +0800</pubDate><description><![CDATA[模拟：定义四个边界，指针按右下左上的顺序遍历，每遍历一条边，边界就减一，并且在某个方向没有可以遍历的数时直接返回。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_回文链表]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136612529</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136612529</guid><author>lll2034006613</author><pubDate>Mon, 11 Mar 2024 02:03:17 +0800</pubDate><description><![CDATA[链表反转：将回文前半部分反转，此时前半部分与后半部分一致。利用这一特点我们可以反转链表的前半部分，再将前半部分与后半部分比较，一致则是回文。通过快慢指针可以定位到链表中部，快指针走两步，慢指针走一步，则快指针到达末尾时慢指针恰好到达中部。迭代+递归：通过迭代正向遍历链表，通过递归逆向遍历链表，同时进行比较。双指针数组：将链表存储在数组中，通过双指针双向访问数组进行比较。有两点需要注意：第一，当节点个数为奇数时，慢指针。恰好定位到中间节点，但中间节点不进行比较，所以。当节点个数为偶数是，慢指针。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_反转链表]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136612149</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136612149</guid><author>lll2034006613</author><pubDate>Mon, 11 Mar 2024 00:26:29 +0800</pubDate><description><![CDATA[非空，再存储最后一个节点，也是就反转后的第一个节点，便于结果返回。迭代：逐步修改节点指针，注意在修改前要保存下一个节点指针。递归：利用递归栈存储先出现节点的信息。，返回先前存储的最后一个节点。，最后再将第一个节点指向。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_相交链表]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136594347</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136594347</guid><author>lll2034006613</author><pubDate>Sun, 10 Mar 2024 04:25:46 +0800</pubDate><description><![CDATA[哈希表：两链表出现的第一个相同的值就是相交节点，因此我们先用哈希记录链表A所有出现过的值，再遍历链表B查找哈希表，找出第一个相同的值即为结果。理由是链表AB具有相同段和不同段，记不同段为Ta、Tb，记相同段为Tc，则按上述步骤遍历至交点时，指针ab的路径。这样，如果两链表有相交点的话，指针ab会同时到达这个交点。双指针遍历：以指针a，指针b分别遍历链表A和链表B。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_搜索二维矩阵]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136594183</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136594183</guid><author>lll2034006613</author><pubDate>Sun, 10 Mar 2024 02:00:26 +0800</pubDate><description><![CDATA[二叉搜索树：从矩阵右上角观察，结构类似二叉搜索树，因此可以用类似的解法来做。具体做法是双指针从右上角开始，向左下角逐步搜索，如果当前值比目标值大，则向下移动，如果当前值比目标值小，则向左移动。直到找到目标值或指针出界。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_矩阵置零]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136575158</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136575158</guid><author>lll2034006613</author><pubDate>Sat, 09 Mar 2024 00:56:04 +0800</pubDate><description><![CDATA[标记变量：常规的做法是利用一个二维数组存储置零后的结果，或者利用两个一维数组存储待置零的行列数。此题可以用常量空间解决，可以利用原数组的第一行存储待置零的行，第一列存储待置零的列，但第一行和第一列的原数据也会丢失，因此我们需要利用两个布尔值分别存储原第一行和原第一列是否需要置零。也就是说，我们将原数组划分为了第一行、第一列、剩余数组三部分进行处理。具体的做法是先用常量存储第一行第一列的待置零位置，再用第一行第一列存储剩余数组的待置零位置，最后根据上述信息置零。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_缺失的第一个正数]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136573681</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136573681</guid><author>lll2034006613</author><pubDate>Fri, 08 Mar 2024 23:06:52 +0800</pubDate><description><![CDATA[正负模拟哈希：偏技巧类的题目，在无法使用额外空间的情况下，只能在原数组中做出类似哈希表的模拟。除去数值，我们还可以用正负来表示下标值的出现情况。首先，数组中存在正负数和0，而负数和0对结果是没有影响的，我们将它们设置为一个较大的正数。第二，我们需要用绝对值来表示这些正整数，因为先出现的值可能会将后出现的值设置为负数。的方式，出现偶数次的数值仍然会被判断为未出现过，因此必须加上判断语句。设想一下，没有出现的最小的正整数可能的值，一定是在。最后我们遍历数组，找到的第一个正数，，如此，当前数组中就只存在正整数。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_除自身以外数组的乘积]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136572597</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136572597</guid><author>lll2034006613</author><pubDate>Fri, 08 Mar 2024 22:18:29 +0800</pubDate><description><![CDATA[O(1)空间复杂度解法：题目规定输出数组不视为额外空间，因此可以直接在输出数组进行前缀数组和后缀数组的计算，先从左到右计算前缀数组，再从右到左直接将后缀数组乘入前缀数组。需要注意边界值的处理。前缀 / 后缀数组：某元素除自身以外的乘积，也就是其。，因此我们可以构造前缀数组和后缀数组，分别存储前。得到结果并用新数组存储。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_轮转数组]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136548683</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136548683</guid><author>lll2034006613</author><pubDate>Fri, 08 Mar 2024 21:15:18 +0800</pubDate><description><![CDATA[循环直到回到第一个开始移动的值。，这个过程可能有若干元素没有被移动，因此需要从。计数，每次移动都+1，直到等于数组长度。这个解法效率较低并且较难理解，不推荐。新数组存储：另外用一个数组存储移动后的结果，再复制回原数组。如何判断所有的值都被移动过一次呢，另外用一个。数组翻转：将整个数组进行反转，再以下标。左右两段分别进行翻转就得到最终结果，很巧妙的解法。原数组移动：在原数组上直接将。，被覆盖的值则继续向后移动覆盖。，需要临时存储被覆盖的值。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_合并区间]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136520397</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136520397</guid><author>lll2034006613</author><pubDate>Wed, 06 Mar 2024 23:07:31 +0800</pubDate><description><![CDATA[区间左边界的大小判断是否重叠，如果重叠则将区间合并为一个。考虑到区间完全处于另一区间内的情况，合并时应该选择。排序：先将区间按左边界从小到大进行排序，假设排序后。区间右边界的较大值作为合并结果。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_最大子数组和]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136517958</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136517958</guid><author>lll2034006613</author><pubDate>Wed, 06 Mar 2024 21:41:38 +0800</pubDate><description><![CDATA[动态规划只确保决策过程的最优化，而不保证结果的最优化，所以最后我们需要找出dp数组中的最大值作为结果。当数组长度每增加1时，最大和连续子数组有两种可能，一是原先的最大和连续子数组加上增加的元素。表示0~i组成的数组的最大子数组和。当数组长度为1时，最大和连续子数组是它本身，也就是。，二是舍弃掉原先的最大连续子数组，以这个增加的元素作为起始建立的新的连续子数组。动态规划：这是一道经典的动态规划题。，我们选择其中的较大值。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_最小覆盖子串]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136516955</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136516955</guid><author>lll2034006613</author><pubDate>Wed, 06 Mar 2024 20:47:14 +0800</pubDate><description><![CDATA[双指针滑动窗口：暴力解法——用双指针来表示字符串s中的子串首尾，遍历所有子串并与字符串t判断是否符合条件。我们可以对遍历和判断的过程进行优化，首先是遍历，右指针先移动直到涵盖所以需要的字母，左指针再移动删除不需要的字母，也就是窗口扩展时寻找可行解，窗口收缩时优化可行解。循环这个过程，找出所有符合条件的子串，比较出最短的子串。然后是判断，维护一个数组，数组下标表示字母，数组内容表示当前滑动窗口下，我们还需要的字母数量。当数组均小于等于0时，代表已经涵盖了所有需要的字母。]]></description><category></category></item><item><title><![CDATA[leetcode 热题 100_滑动窗口最大值]]></title><link>https://blog.youkuaiyun.com/lll2034006613/article/details/136513592</link><guid>https://blog.youkuaiyun.com/lll2034006613/article/details/136513592</guid><author>lll2034006613</author><pubDate>Wed, 06 Mar 2024 19:07:39 +0800</pubDate><description><![CDATA[对于添加的元素，直接和当前最大值比较即可，但对于移除的元素，如果移除的是原先的最大值，则需要重新遍历窗口寻找新的最大值，因此优化的重点在于避开遍历窗口这一步骤。通过构造一个递减的Deque双端队列，我们可以将当前最大值维护在队首，并且当最大值被移除时，新的最大值依然在队首。而添加的元素则可以从队尾插入，同时，可以将队尾小于添加元素的值全部移除，因为位于窗口末尾的元素一定比其他元素晚移除，比它小的值不可能成为窗口的最大值。以下附上动画演示（来源。]]></description><category></category></item></channel></rss>