<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_53340107的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_53340107</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_53340107]]></copyright><item><title><![CDATA[25.删除链表中倒数第N个结点]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136922452</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136922452</guid><author>qq_53340107</author><pubDate>Thu, 21 Mar 2024 22:13:32 +0800</pubDate><description><![CDATA[此题的重点是双指针法，定义快慢指针，题目要求删除倒数第n个结点，那么先让快指针移动到第n个结点，然后再让快慢指针一起移动，直到快指针移动到NULL，此时慢指针就移动到了倒数第n个结点。又因为如果要删除一个结点，需要找到该结点的上一个结点，所以让快指针移动到第n个结点后，再往下移动一个结点，上述操作后，慢指针就会移动到被删除结点的上一个结点。核心思想是，假设有10个数，我想找到倒数第二个数，那么先单独移动两次（正向），然后再一起移动（10-2）次，也就是移动八次，找到倒数第二个也就是正数第八个。]]></description><category></category></item><item><title><![CDATA[24.两数相加]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136921834</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136921834</guid><author>qq_53340107</author><pubDate>Thu, 21 Mar 2024 22:01:42 +0800</pubDate><description><![CDATA[思路：定义sum，以及新链表，while循环中，从左往右对应结点相加的结果给sum，然后sum%10得到个位也就是新链表的第一位，sum/10作为进位的值也就是新的sum，放到下一次相加中。l1的最后一个数9（l1）+1（sum）=10 写0 进1（sum） ，此时l1、l2都是null，但是sum是1，所以还要进入循环，把sum放到新链表的下一个结点中。while循环的条件是l1 || l2 || sum ,只要这仨有一个不为0就继续循环，把相加的结果添加到新链表中。的链表，表示两个非负的整数。]]></description><category></category></item><item><title><![CDATA[23.合并两个有序链表]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136921171</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136921171</guid><author>qq_53340107</author><pubDate>Thu, 21 Mar 2024 21:44:13 +0800</pubDate><description><![CDATA[思路：新建一个虚拟头节点，也就是新的链表。然后在while循环里面，两个指针同时遍历两个链表的结点，然后比较，把value值小的结点取出来接到新链表当前节点的next，然后小的那个往后移动一个节点，继续比较。while循环的条件是l1 l2都不为空指针，当有一个为空指针时，退出循环，把另一个链表的剩余部分接到新链表中。新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。]]></description><category></category></item><item><title><![CDATA[22.环形链表Ⅱ]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136837641</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136837641</guid><author>qq_53340107</author><pubDate>Tue, 19 Mar 2024 11:49:03 +0800</pubDate><description><![CDATA[思路：跟上一题一样，先判断有无环，如果有环，再根据同样时间、不同速度走过的长度关系，列公式。有环的话，假设在环的右下角那个点相遇。指针再次到达，则链表中存在环。为了表示给定链表中的环，评测系统内部使用整数。如果链表中有某个节点，可以通过连续跟踪。链表中有一个环，其尾部连接到第二个节点。链表中有一个环，其尾部连接到第一个节点。，返回链表开始入环的第一个节点。来表示链表尾连接到链表中的位置（，仅仅是为了标识链表的实际情况。返回索引为 1 的链表节点。如果链表无环，则返回。，则在该链表中没有环。]]></description><category></category></item><item><title><![CDATA[21.环形链表]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136832915</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136832915</guid><author>qq_53340107</author><pubDate>Tue, 19 Mar 2024 10:25:54 +0800</pubDate><description><![CDATA[思路：可以联想，两个人在操场跑圈，一个快的一个慢的，如果他俩相遇，则说明有环，而且一定是在环内相遇。本题用快慢指针来解决。指针再次到达，则链表中存在环。为了表示给定链表中的环，评测系统内部使用整数。来表示链表尾连接到链表中的位置（索引从 0 开始）。如果链表中有某个节点，可以通过连续跟踪。链表中有一个环，其尾部连接到第二个节点。链表中有一个环，其尾部连接到第一个节点。仅仅是为了标识链表的实际情况。，判断链表中是否有环。给你一个链表的头节点。]]></description><category></category></item><item><title><![CDATA[20.回文链表]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136821023</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136821023</guid><author>qq_53340107</author><pubDate>Mon, 18 Mar 2024 20:40:55 +0800</pubDate><description><![CDATA[思路：把链表结点的元素复制到数组中，然后双指针比较。给你一个单链表的头节点。，请你判断该链表是否为。]]></description><category></category></item><item><title><![CDATA[19.反转链表]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136813511</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136813511</guid><author>qq_53340107</author><pubDate>Mon, 18 Mar 2024 16:32:14 +0800</pubDate><description><![CDATA[示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL。可以把tmp=cur->next 理解为把tmp指针移动到cur的下一个结点。把cur->next=pre理解为cur节点的箭头指向pre节点。其实本质都是指针间的赋值操作，只不过这样理解比较直观一些。cur=temp 把cur移动到temp的位置。pre=cur 把pre移动到cur的位置。1.while的循环条件是cur，很巧妙。2.在链表操作时，为了直观理解，题意：反转一个单链表。]]></description><category></category></item><item><title><![CDATA[18.相交链表]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136771016</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136771016</guid><author>qq_53340107</author><pubDate>Sat, 16 Mar 2024 21:59:41 +0800</pubDate><description><![CDATA[分别定义两个指针，p和q，把链表a和b的头指针赋值给p、q。然后让p、q挨个往下一个结点移动，如果移动到null就从切换到另外的链表头结点继续移动。直到p和q相等，也就是移动到相同的位置，此时的p或q就是相交的结点位置。然后返回p或q，就算俩链表不相交，也没事，最终返回的大不了是null。，请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点，返回。，函数返回结果后，链表必须。整个链式结构中不存在环。给你两个单链表的头节点。]]></description><category></category></item><item><title><![CDATA[17.搜索二维矩阵Ⅱ]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136763422</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136763422</guid><author>qq_53340107</author><pubDate>Sat, 16 Mar 2024 15:22:53 +0800</pubDate><description><![CDATA[编写一个高效的算法来搜索。思路：暴力解法，直接搜索。]]></description><category></category></item><item><title><![CDATA[16.旋转图像]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136758596</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136758596</guid><author>qq_53340107</author><pubDate>Sat, 16 Mar 2024 11:05:57 +0800</pubDate><description><![CDATA[旋转图像，这意味着你需要直接修改输入的二维矩阵。请你将图像顺时针旋转 90 度。思路：先对角线两边互换，再中心线两侧互换。使用另一个矩阵来旋转图像。]]></description><category></category></item><item><title><![CDATA[15.螺旋矩阵]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136745435</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136745435</guid><author>qq_53340107</author><pubDate>Fri, 15 Mar 2024 17:28:16 +0800</pubDate><description><![CDATA[所以每次遍历完一条边界后，要把该边界先向内移动一个单位，同时判断是否超过了对面的边界，如果超过了，就break，退出循环。思路：定义上下左右四条边界，然后按上、右、下、左的顺序挨个遍历，每遍历完一条边界，就立即把该边界收缩一个单位。如图所示，上边界遍历完后（1、2、3、4），就要往下移动上边界，遍历完右边界，往左移动一个单位，再遍历下边界11、10、9。然后下边界往上移动一个单位，遍历左边界，此时只有5了。左边界往右移动一个单位，开始第二轮，遍历上边界6、7。然后再遍历右边界的元素8、12。]]></description><category></category></item><item><title><![CDATA[14.矩阵置零]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136734456</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136734456</guid><author>qq_53340107</author><pubDate>Fri, 15 Mar 2024 11:22:09 +0800</pubDate><description><![CDATA[思路：定义两个数组，一个m长度，一个n长度。然后遍历矩阵的每个元素，如果遇到0，就把两个数组对应行和列的位置标记一下。然后重新遍历矩阵，如果遍历到标记元素对应的行或列，就把元素置0.，则将其所在行和列的所有元素都设为。的矩阵，如果一个元素为。]]></description><category></category></item><item><title><![CDATA[13.除自身以外数组的乘积]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136723283</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136723283</guid><author>qq_53340107</author><pubDate>Thu, 14 Mar 2024 22:08:07 +0800</pubDate><description><![CDATA[定义r和l俩数组，r[i]表示nums数组中第i个元素之前的所有数的乘积，l[i]表示第i个元素之后的所有数的乘积，然后再用一个for循环，把r和l的数组元素对应相乘，就是符合条件的数组。之中任意元素的全部前缀元素和后缀的乘积都在。时间复杂度内完成此题。之外其余各元素的乘积。]]></description><category></category></item><item><title><![CDATA[12.轮转数组]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136716911</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136716911</guid><author>qq_53340107</author><pubDate>Thu, 14 Mar 2024 17:27:38 +0800</pubDate><description><![CDATA[思路：先把整个数组反转，再把前k个数反转，再把剩下的反转，就可以得到符合条件的数组。注意：有可能给的K是大于数组长度的，所以要用K对数组长度取余。向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]，将数组中的元素向右轮转。]]></description><category></category></item><item><title><![CDATA[11.合并区间]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136713291</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136713291</guid><author>qq_53340107</author><pubDate>Thu, 14 Mar 2024 17:20:08 +0800</pubDate><description><![CDATA[本质：排序后，先定义第一个数组为startend数组，然后只要下一个数组与它重叠，那么就扩展或者保持不变startend数组，如果下一个数组不和它重叠（无法合并），那么就把它放进结果数组里，下一个数组就是新的startend数组。①如果该数组的左区间大于start，说明startend数组与该数组无重叠，那么把startend数组添加到ans数组中，然后把该数组（第i个数组）变成新的startend数组。②如果该数组的左区间小于等于start，说明欸还startend数组有重叠，就更新end，]]></description><category></category></item><item><title><![CDATA[10.最大子数组和]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136693371</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136693371</guid><author>qq_53340107</author><pubDate>Wed, 13 Mar 2024 22:23:59 +0800</pubDate><description><![CDATA[如果i数字前面的数字构成的连续数组的最大和小于等于0，那么就对第i个数字结尾的数组最大和没有正向贡献，所以直接把第i个数字赋值给f(i)。如果大于0，则对本次最大和有贡献，前i-1个最大和加上当前第i个数字，赋值给f(i)。，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。连续子数组 [4,-1,2,1] 的和最大，为 6。设f(i)表示以第i个数字结尾的连续子数组的最大和。注意：这个思路过于巧妙，还需要反复理解推敲。是数组中的一个连续部分。思路：动态规划 状态函数。]]></description><category></category></item><item><title><![CDATA[9.和为K的子数组]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136683487</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136683487</guid><author>qq_53340107</author><pubDate>Wed, 13 Mar 2024 16:37:28 +0800</pubDate><description><![CDATA[假设数组的前缀和数组为prefixSum，其中prefixSum[i]表示从数组起始位置到第i个位置的元素之和。说明从第i+1个位置到第j个位置的连续子数组的和为k。在遍历的过程中，检查在map中是否存在prefixSum[j] - k的前缀和，如果存在，说明从某个位置到当前位置的连续子数组的和为k，我们将对应的次数累加到结果中。在代码中，其实在遍历数组的每个数字时，map中存的历史前缀和相当于prefixSum[i]，而当前数字的前缀和是prefixSum[j]，所以用一个sum就可以表示。]]></description><category></category></item><item><title><![CDATA[8.找到字符串中所有字母异位词]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136645915</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136645915</guid><author>qq_53340107</author><pubDate>Tue, 12 Mar 2024 11:26:03 +0800</pubDate><description><![CDATA[然后在for循环中，定义滑动窗口的左指针为0，右指针为p.size()-1（也就是滑动窗口的最后一个字母），把右指针的字母记录到currcount数组中，并且判断此时currcount和count是否一致，如果一致，把此时的左指针添加到结果数组中。注意：记录滑动窗口中字母出现次数的数组在定义并初始化时，只初始化s字符串前n-1个（n为p字符串的长度）字母出现次数。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。]]></description><category></category></item><item><title><![CDATA[7.无重复字符的最长字串]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136631708</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136631708</guid><author>qq_53340107</author><pubDate>Mon, 11 Mar 2024 18:52:28 +0800</pubDate><description><![CDATA[2.在for循环中，如果r指针指向的元素在map中存在（说明字符串之前出现过该字符），并且同时满足l指针的位置小于等于之前字符的位置（即之前的字符在滑动窗口内），那么就让l指针移动到之前字符的下一个位置。本题使用双指针组成的滑动窗口以及哈希表的map（key表示字符，value表示在字符串中的下标）。l是左指针，r是右指针。在右指针指到重复元素的时候，并且滑动窗口里面还包含之前的重复元素，此时就要把左指针移到之前重复元素的下一个位置。此时，右指针指向a，发现map表里面有a，即发现了重复元素，但是。]]></description><category></category></item><item><title><![CDATA[6.三数之和]]></title><link>https://blog.youkuaiyun.com/qq_53340107/article/details/136623931</link><guid>https://blog.youkuaiyun.com/qq_53340107/article/details/136623931</guid><author>qq_53340107</author><pubDate>Mon, 11 Mar 2024 14:55:26 +0800</pubDate><description><![CDATA[对b、c去重完后，此时left和right已经移动到了最后一个不重复的有效元素位置，下一个元素与该位置的元素是不相同的。去重就要求分别对a、b、c三个元素都要去重，因为三元组是元素的组合，假设遍历到a1时，满足条件的b、c有三组，a1的下一个位置a2的值等于a1，如果不对a去重的话，就会多出来三组重复的三元组。要注意，去重是要判断当前位置与前一位置（已经使用过）的元素是否相同，而不是判断当前位置与当前位置的下一个位置是否相同，因为下一位置有可能是符合条件的与当前位置相等的b元素，容易被错过。]]></description><category></category></item></channel></rss>