<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[foolS22的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/foolS22</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; foolS22]]></copyright><item><title><![CDATA[​leetcode算法题第77题：组合​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125645287</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125645287</guid><author>foolS22</author><pubDate>Wed, 06 Jul 2022 18:22:12 +0800</pubDate><description><![CDATA[给定两个整数  和 ，返回范围  中所有可能的  个数的组合。你可以按 任何顺序 返回答案。回溯三部曲 ：回溯法的书写模板：]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第36题：有效的数独​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125610344</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125610344</guid><author>foolS22</author><pubDate>Mon, 04 Jul 2022 23:01:08 +0800</pubDate><description><![CDATA[请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ，验证已经填入的数字是否有效即可。        1.数字 1-9 在每一行只能出现一次。
        2.数字 1-9 在每一列只能出现一次。
        3.数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。（请参考示例图）注意：  有效的数独满足以下三个条件：        1.同一个数字在每一行只能出现一次；        2.同一个数字在每一列只能出现一次；        3.同一个数字在每一个小九宫格只能出现一]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第34题：在排序数组中查找元素的第一个和最后一个位置​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125567780</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125567780</guid><author>foolS22</author><pubDate>Sat, 02 Jul 2022 11:36:02 +0800</pubDate><description><![CDATA[给你一个按照非递减顺序排列的整数数组 nums，和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target，返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。1.初始化： 左边界 i = 0，右边界 j = len(nums) - 1。
2.循环二分： 当闭区间 [i, j]无元素时跳出；
        1.计算中点 m = (i + j) / 2 （向下取整）；
        2.若 nums[m] < ta]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第33题：搜索旋转排序数组​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125548272</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125548272</guid><author>foolS22</author><pubDate>Thu, 30 Jun 2022 21:13:54 +0800</pubDate><description><![CDATA[整数数组 nums 按升序排列，数组中的值 互不相同 。在传递给函数之前，nums 在预先未知的某个下标 k（0 ]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第32题：最长有效括号​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125529928</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125529928</guid><author>foolS22</author><pubDate>Wed, 29 Jun 2022 21:40:21 +0800</pubDate><description><![CDATA[给你一个只包含  和  的字符串，找出最长有效（格式正确且连续）括号子串的长度。 具体做法是我们始终保持栈底元素为当前已经遍历过的元素中「最后一个没有被匹配的右括号的下标」，这样的做法主要是考虑了边界条件的处理，栈里其他元素维护左括号的下标：1.对于遇到的每个‘(’ ，我们将它的下标放入栈中
2.对于遇到的每个‘)’ ，我们先弹出栈顶元素表示匹配了当前右括号：
        如果栈为空，说明当前的右括号为没有被匹配的右括号，我们将其下标放入栈中来更新我们之前提到的「最后一个没有被匹配的右括号的下标」
  ]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第31题：下一个排列​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125501457</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125501457</guid><author>foolS22</author><pubDate>Tue, 28 Jun 2022 14:34:30 +0800</pubDate><description><![CDATA[整数数组的一个 排列  就是将其所有成员以序列或线性顺序排列。例如，arr = [1,2,3] ，以下这些都可以视作 arr 的排列：[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。
整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地，如果数组的所有排列根据其字典顺序从小到大排列在一个容器中，那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列，那么这个数组必须重排为字典序最小的排列（即，其元素按升序排列）。例如，arr = [1,]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第50题：Pow(x, n)​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125452877</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125452877</guid><author>foolS22</author><pubDate>Fri, 24 Jun 2022 22:05:28 +0800</pubDate><description><![CDATA[实现 pow(x, n) ，即计算  的整数  次幂函数（即， ）。 1.快速幂+递归  2.快速幂+迭代把n转换成二进制的数，从左往右，每一位对应上一位的平方，初始值为x，当这一位为1时，初始值ans*该位对应的x值...]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第26题：删除有序数组中的重复项​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125386899</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125386899</guid><author>foolS22</author><pubDate>Tue, 21 Jun 2022 10:53:56 +0800</pubDate><description><![CDATA[给你一个 升序排列 的数组  ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 将最终结果插入  的前  个位置后返回  。不要使用额外的空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。定义两个指针 fast 和 slow 分别为快指针和慢指针，快指针表示遍历数组到达的下标位置，慢指针表示下一个不同元素要填入的下标位置，初始时两个指针都指向下标 1。假设数组nums 的长度为 n。将快指针 fast 依次遍]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第25题：K 个一组翻转链表​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125381217</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125381217</guid><author>foolS22</author><pubDate>Mon, 20 Jun 2022 21:53:21 +0800</pubDate><description><![CDATA[给你链表的头节点 head ，每 k 个节点一组进行翻转，请你返回修改后的链表。k 是一个正整数，它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍，那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值，而是需要实际进行节点交换。 1.先写出翻转整个链表的函数，返回反转后的head和tail2.递归法，不断比较链表的个数是否大于k，如果大于k则调用翻转链表函数，重新建立连接，否则直接返回翻转前的链表...]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第24题：两两交换链表中的节点​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125344170</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125344170</guid><author>foolS22</author><pubDate>Sat, 18 Jun 2022 10:47:23 +0800</pubDate><description><![CDATA[给你一个链表，两两交换其中相邻的节点，并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题（即，只能进行节点交换）。   一、应用辅助栈帮忙我们利用一个 stack，然后不断迭代链表，每次取出两个节点放入 stack 中，再从 stack 中拿出两个节点。
借助 stack 后进先出的特点，放进去的时候是 1,2 。拿出来的时候就是 2，1 两个节点了。再把这两个节点串联起来，重复这个逻辑遍历完整个链表，就可以做到两两反转的效果了。虽然用到了 stack，但因为只存了两个元素，所以空间复杂度]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第23题：合并K个升序链表​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125329439</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125329439</guid><author>foolS22</author><pubDate>Fri, 17 Jun 2022 10:56:45 +0800</pubDate><description><![CDATA[给你一个链表数组，每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中，返回合并后的链表.1.先找出合并两个升序链表2.用二分法同时对多个链表进行合并  3.最终合并到最后一个大链表...]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第22题：括号生成​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125327963</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125327963</guid><author>foolS22</author><pubDate>Fri, 17 Jun 2022 10:00:10 +0800</pubDate><description><![CDATA[数字  代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且 有效的 括号组合。 首先，面向小白：什么是动态规划？在此题中，动态规划的思想类似于数学归纳法，当知道所有i...]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第21题：合并两个有序链表​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125292894</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125292894</guid><author>foolS22</author><pubDate>Wed, 15 Jun 2022 11:11:24 +0800</pubDate><description><![CDATA[将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。    什么是递归呢？函数在运行时调用自己，这个函数就叫递归函数，调用的过程叫做递归。
比如定义函数 f(x)=x+f(x−1)：思路：我们可以如下递归地定义两个链表里的 merge 操作（忽略边界情况，比如空链表等）：我们直接将以上递归过程建模，同时需要考虑边界情况。如果 l1或者l2一开始就是空链表 ，那么没有任何操作需要合并，所以我们只需要返回非空链表。否则，我们要判断 l1 和 l2 哪一个链表的头节点的]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第20题：有效的括号​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125272928</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125272928</guid><author>foolS22</author><pubDate>Tue, 14 Jun 2022 10:42:45 +0800</pubDate><description><![CDATA[给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。有效字符串需满足：1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。本题可以使用栈这一数据结构来解答，栈的特点是先进后出，可以适用此题的匹配。我们遍历给定的字符串 s。当我们遇到一个左括号时，我们会期望在后续的遍历中，有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合，因此我们可以将这个左括号放入栈顶。当我们遇到一个右括号时，我们需要将一个相同类型的左括号闭合。此时，我们可以取出]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第19题：删除链表的倒数第 N 个结点​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125265043</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125265043</guid><author>foolS22</author><pubDate>Mon, 13 Jun 2022 18:46:10 +0800</pubDate><description><![CDATA[给你一个链表，删除链表的倒数第  个结点，并且返回链表的头结点。   1.我们可以使用两个指针 first 和 second 同时对链表进行遍历，并且first 比 second 超前 n 个节点。当 first 遍历到链表的末尾时，second 就恰好处于倒数第 n 个节点。2.具体地，初始时 first 和 second 均指向头节点。我们首先使用 first 对链表进行遍历，遍历的次数为 n。此时，first 和 second 之间间隔了n−1个节点，即 first 比second 超前了 n 个节点]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第18题：四数之和​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125250584</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125250584</guid><author>foolS22</author><pubDate>Sun, 12 Jun 2022 22:09:56 +0800</pubDate><description><![CDATA[给你一个由 n 个整数组成的数组 nums ，和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] （若两个四元组元素一一对应，则认为两个四元组重复）：1. 0 ...]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第17题：电话号码的字母组合​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125191854</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125191854</guid><author>foolS22</author><pubDate>Wed, 08 Jun 2022 23:22:45 +0800</pubDate><description><![CDATA[给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。1. 首先使用哈希表存储每个数字对应的所有可能的字母，然后进行回溯操作。2.回溯过程中维护一个字符串，表示已有的字母排列（如果未遍历完电话号码的所有数字，则已有的字母排列是不完整的）。该字符串初始为空。每次取电话号码的一位数字，从哈希表中获得该数字对应的所有可能的字母，并将其中的一个字母插入到已有的字母排列后面，然后继续处理电话号码的后一位数字，直到]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第16题：最接近的三数之和​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125166550</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125166550</guid><author>foolS22</author><pubDate>Tue, 07 Jun 2022 15:50:08 +0800</pubDate><description><![CDATA[给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数，使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。本题与 15. 三数之和 非常类似，可以使用「双指针」的方法来解决。 1.先把数组从小到大排序2.先确定第一个指针a，a从左往右依次遍历。3.随后确定第二指针b,第三指针c，b从a右边第一个数组往右遍历，c则从整个数组的末尾向前遍历。4.每当三个元素的和大于taget时，c向左移动一位，否则b向右移动一位。每一次移动，都]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第15题：三数之和​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125155260</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125155260</guid><author>foolS22</author><pubDate>Mon, 06 Jun 2022 22:50:35 +0800</pubDate><description><![CDATA[给你一个包含 n 个整数的数组 nums，判断 nums 中是否存在三个元素 a，b，c ，使得 a + b + c =0 ？请你找出所有和为 0 且不重复的三元组。注意：答案中不可以包含重复的三元组。题目要求不重复：则需要使用到排序算法。这里的双指针是伪双指针（实际应该是三指针 ）第一个指针p1(第一个数)从头到尾开始遍历，第二个指针p2则表示第二个数，因为是不重复的三元组，所以第二个指针p2要从第一个指针p1的右    边一个元素开始遍历，第三个指针p3（第三个元素）从末尾开始遍历，当三个元素的值大于0]]></description><category></category></item><item><title><![CDATA[​leetcode算法题第14题：最长公共前缀​]]></title><link>https://blog.youkuaiyun.com/foolS22/article/details/125136551</link><guid>https://blog.youkuaiyun.com/foolS22/article/details/125136551</guid><author>foolS22</author><pubDate>Sun, 05 Jun 2022 20:59:41 +0800</pubDate><description><![CDATA[编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀，返回空字符串 。纵向扫描时，从前往后遍历所有字符串的每一列，比较相同列上的字符是否相同，如果相同则继续对下一列进行比较，如果不相同则当前列不再属于公共前缀，当前列之前的部分为最长公共前缀。...]]></description><category></category></item></channel></rss>