<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ganggang的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/laurasam</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; laurasam]]></copyright><item><title><![CDATA[leetcode 708 剑指 Offer II 029. 排序的循环链表 python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122340816</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122340816</guid><author>laurasam</author><pubDate>Thu, 06 Jan 2022 12:20:38 +0800</pubDate><description><![CDATA[题目描述：





题解：

可以分为三种情况：

1.输入head链表为空，创建一个head节点，val等于要插入的值，next指向自身，返回head。

2.要插入的值在输入head链表中的某两个节点之间，即存在一个节点cur，nxt=cur，插入的值在这两个节点之之间，cur.val&lt;=insertval&lt;=nxt.val

3.要插入的值大于当前head链表中最大值或小于链表中最小值，则应该插入的位置在head链表最大最小值之间，比如示例1，如果要插入的值是0，则应该在4和1之间。即.]]></description><category></category></item><item><title><![CDATA[leetcode445 剑指 Offer II 025. 链表中的两数相加 python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122331991</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122331991</guid><author>laurasam</author><pubDate>Wed, 05 Jan 2022 21:08:11 +0800</pubDate><description><![CDATA[题目描述：



题解：栈

1.用stack1保存链表l1中节点，stack2保存链表l2中节点值。

2.创建一个初始为None的节点，表示进位数字的into，初始为0.

3.当stack1或stack2不为空或into不为0的时候执行加法：stack1栈顶元素值保存在a，stack2栈顶元素值保存在b，如果栈为空，则对应的值为0.

4.计算a+b+into的值，(a+b+into)%10为当前位的和，(a+b+into)//10为当前位向前一位的进位，更新into。

5.创建一个新节点newno]]></description><category></category></item><item><title><![CDATA[leetcode 647 剑指 Offer II 020. 回文子字符串的个数python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122317842</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122317842</guid><author>laurasam</author><pubDate>Wed, 05 Jan 2022 10:59:57 +0800</pubDate><description><![CDATA[题目描述：



题解：中心拓展

思路：对每个可能的回文中心分别向两侧进行拓展，判断当前对应的子字符串是否回文。回文中心分为奇数和偶数两种情况。

以s=abba，s长度为4为例，可能的回文中心有：a ab b bb b ba a7种，回文中心起始和终止位置如下：



第i组回文中心的左右边界分别为：l = i//2 j = l+i%2

然后分别判断s[l]与s[j]是否相同，相同则说明找到一个回文字串，然后l r分别向左和向右移动，知道超出范围或两个位置的字符不相等。


class Solutio]]></description><category></category></item><item><title><![CDATA[leetcode 680 剑指 Offer II 019. 最多删除一个字符得到回文]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122311970</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122311970</guid><author>laurasam</author><pubDate>Tue, 04 Jan 2022 21:21:00 +0800</pubDate><description><![CDATA[题目描述：



题解：

1.判断字符串s是否回文，i取值从0到len(s)//2+1，j=len(s)-i-1，如果每组s[i] s[j]都相等，则s回文。

2.如果某对s[i] s[j]不想等，判断去掉s[i]或s[j]之后，s是否回文。即s[i+1:j+1]（去掉s[i]）或者s[i:j]（去掉s[j]）是否回文。


class Solution:
    def validPalindrome(self, s: str) -&gt; bool:
        def helper(s):
 ]]></description><category></category></item><item><title><![CDATA[leetcode 125 剑指 Offer II 018. 有效的回文python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122311914</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122311914</guid><author>laurasam</author><pubDate>Tue, 04 Jan 2022 21:16:58 +0800</pubDate><description><![CDATA[题目描述：



题解：

1.将输入字符串s中数字和字母依次添加到一个数组中，添加字母的时候将字母全部转为小写形式。

2.判断数组中的第i个元素是否与len-i-1相等。


class Solution:
    def isPalindrome(self, s: str) -&gt; bool:
        l_str = []
        for i in range(len(s)):
            if s[i]&gt;='a' and s[i]&lt;='z':
      ]]></description><category></category></item><item><title><![CDATA[剑指 Offer II 011. 0 和 1 个数相同的子数组python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122291832</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122291832</guid><author>laurasam</author><pubDate>Mon, 03 Jan 2022 20:19:16 +0800</pubDate><description><![CDATA[题目描述：



题解：

1.将nums中的1保持不变，将0变为-1，子数组中0 1个数相等即子数组和为0.

2.用数组pre_sum保存nums的前缀和，dict_sum键为某个前缀和，值为该前缀和对应的序号i，即nums[0]到nums[i]的和对应的值为i。

3.计算前缀和，保存在pre_sum[-1]中，如果dict_sum中存在pre_sum[-1]的键，则说明i-dict_sum[pre_sum[-1]]段的子数组和为0，如果pre_sum[-1]不在dict_sum中，则将其加入，对应的]]></description><category></category></item><item><title><![CDATA[剑指 Offer II 010. 和为 k 的子数组python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122284648</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122284648</guid><author>laurasam</author><pubDate>Mon, 03 Jan 2022 10:44:55 +0800</pubDate><description><![CDATA[题目描述：



题解：前缀和

由于题目说明中输入nums数组中可能存在负数，因此滑动窗口的方法不适用。

1.创建一个pre_sum数组，pre_sum[0]=0，记录nums数组的前缀和。

2.创建一个dict sum_dict，记录前缀和为某个值的子数组数量，初始化返回值ret=0。

3.每次计算出一个前缀和pre_sums[-1]，将其值减k，如果pre_sums[-1]-k在sum_dict存在，则返回值ret加上sum_dict对应的value值。

4.如果pre_sum[-1]在sum]]></description><category></category></item><item><title><![CDATA[leetcode 653. 两数之和 IV - 输入 BST python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122245588</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122245588</guid><author>laurasam</author><pubDate>Thu, 30 Dec 2021 21:28:12 +0800</pubDate><description><![CDATA[题目描述：







题解一：双指针

1.二叉搜索树的中序遍历结果为一个升序数组，将输入root中序遍历结果保存在数组result中。

2.对result数组利用双指针进行查找，left=0 right = len(nums)-1，如果找到一组result[left]+result[right]=k，则返回True，否则返回False。


# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self..]]></description><category></category></item><item><title><![CDATA[剑指 Offer II 007. 数组中和为 0 的三个数python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122239998</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122239998</guid><author>laurasam</author><pubDate>Thu, 30 Dec 2021 16:45:36 +0800</pubDate><description><![CDATA[题目描述：



题解一：回溯 超时


class Solution:
    def threeSum(self, nums: List[int]) -&gt; List[List[int]]:
        result = []
        def helper(nums,start,nowl,nowsum):
            if len(nowl)==3 and nowsum==0 and sorted(nowl) not in result:
                r.]]></description><category></category></item><item><title><![CDATA[剑指 Offer II 005. 单词长度的最大乘积python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122231477</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122231477</guid><author>laurasam</author><pubDate>Thu, 30 Dec 2021 11:00:32 +0800</pubDate><description><![CDATA[题目描述：



题解：

思路：

1.用一个int数字word_int[i]表示words[i]的字母出现情况。

2.如果word_int[i]和word_int[j]按位与操作结果为0，说明words[i]与words[j]无重复字符。

3.python按位与操作符&amp;，按位或|，按位异或^。python中char转int ord(char)，int转char char(int)


class Solution:
    def maxProduct(self, words: List[s]]></description><category></category></item><item><title><![CDATA[剑指 Offer II 004. 只出现一次的数字 python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122208327</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122208327</guid><author>laurasam</author><pubDate>Wed, 29 Dec 2021 09:47:52 +0800</pubDate><description><![CDATA[题目描述：



题解一：dict

用一个dict分别记录nums数组中每个数字出现的次数，然后返回只出现一次的数字。


class Solution:
    def singleNumber(self, nums: List[int]) -&gt; int:
        numdict = {}
        for num in nums:
            if num in numdict:
                numdict[num]=numdict[num]+1
 ]]></description><category></category></item><item><title><![CDATA[剑指 Offer II 003. 前 n 个数字二进制中 1 的个数python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122201857</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122201857</guid><author>laurasam</author><pubDate>Tue, 28 Dec 2021 20:37:00 +0800</pubDate><description><![CDATA[题目描述：



题解：参考力扣

对数字num，num = num&amp;(num-1)将num最后一个1转为0，因此对num执行该操作的次数就是num中二进制1的位数。

比num=1111为例，1111&amp;(1111-1)=1111&amp;1110=1110

               1110&amp;(1110-1)=1110&amp;1101=1100

               1100&amp;(1100-1...]]></description><category></category></item><item><title><![CDATA[剑指 Offer II 002. 二进制加法python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122199171</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122199171</guid><author>laurasam</author><pubDate>Tue, 28 Dec 2021 18:05:11 +0800</pubDate><description><![CDATA[题目描述：



题解：

1.定义一个add函数，有a b c三个输入参数，分别对应两个加数和一个进位，innum，resnum两个返回参数，分别对应向前一位的进位和这一位的结果。如果a+b+c&gt;=2，innum = 1，resnum = a+b+c-innum

2.判断输入a b两个参数长度是否相等，如果不想等，则将a b中较短的前面补0。

3.从a b最后一位开始调用add函数，结果保存在result数组中，然后将result数组按照逆序输出为字符串。


class Solution:
.]]></description><category></category></item><item><title><![CDATA[剑指 Offer 44. 数字序列中某一位的数字python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122144176</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122144176</guid><author>laurasam</author><pubDate>Sat, 25 Dec 2021 15:48:37 +0800</pubDate><description><![CDATA[题目描述：



题解：

1.若n&lt;10，则n对应0-9的一位数，直接返回n即可。

2.对于n&gt;10情况，先将n-10，减去前面10个一位数，设置三个变量：

&lt;1&gt;digit表示当前数字数位，如0-9 digit=1，10-99 digit=2，初始化为2。

&lt;2&gt;start表示当前digit数位的开始数字，比如digit=2 start=10，digit=3 start=100。

&lt;3&gt;num表示数位=digit有多少个数字，digit=2，两位数]]></description><category></category></item><item><title><![CDATA[剑指 Offer 37. 序列化二叉树python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122108697</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122108697</guid><author>laurasam</author><pubDate>Thu, 23 Dec 2021 16:17:52 +0800</pubDate><description><![CDATA[题目描述：





题解：

参考：力扣

二叉树的前 中 后序遍历对应的二叉树不唯一，完整表示二叉树需要把null空节点也记录。

二叉树的序列化：借助队列

1.创建一个队列queue，初始时只有root节点，创建一个list，初始为空，保存序列化结果。

2.每次取出队列中第一个节点node，判断node是否为空节点，如果不是则将node.val加入result，然后将node的左右子节点加入队列，如果node为空节点，则直接在result中添加null。

以题目示例中的二叉树为例：



...]]></description><category></category></item><item><title><![CDATA[leetcode 376. 摆动序列 python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122043062</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122043062</guid><author>laurasam</author><pubDate>Mon, 20 Dec 2021 15:48:15 +0800</pubDate><description><![CDATA[题目描述：





题解：

1.如果输入nums只有一个元素返回1，如果nums有两个元素，如果两个数字不等则返回2，否则返回1.

2.计算nums数组中相邻数字的差，保存在gaps数组。最终摇摆序列的长度=max(第一个差值为正数的序列最长长度，第一个差值为负数的序列最长长度)+1，分别用p_len n_len记录第一个差值为正数和负数的序列长度，p_start，n_start分别记录差值为正数和负数的开始位置。

3.分别从p_start依次寻找差值为负，正，负....记录长度，n_start做.]]></description><category></category></item><item><title><![CDATA[剑指 Offer 59 - II. 队列的最大值python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122037552</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122037552</guid><author>laurasam</author><pubDate>Mon, 20 Dec 2021 11:26:23 +0800</pubDate><description><![CDATA[题目描述：



题解：

参考：力扣

思路：维护两个队列，一个队列queue记录正常的出队入队操作，另一个maxqueue记录最大值。

1.pushback时，将value加入queue，如果maxqueue[-1]小于value，则将maxqueue中所有小于value的数字出队，然后再将value加入maxqueue，否则直接入队。

2.maxvalue总在maxqueue[0]，如果popleft时queue[0]=maxvalue[0]，则将maxvalue[0]出队。


class M.]]></description><category></category></item><item><title><![CDATA[剑指 Offer 67. 把字符串转换成整数python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122035112</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122035112</guid><author>laurasam</author><pubDate>Mon, 20 Dec 2021 10:02:10 +0800</pubDate><description><![CDATA[题目描述：





题解：

1.去除str多余空格。

2.首先判断str[0]弟一个字符是否合法，如果str[0]是数字，正负号，则合法，否则直接返回0.

3.flag记录数字正负，1为正，-1为负，zero_nums记录之前是否出现过非0数字，用于去掉多余先导0。

4.从下标1开始对str遍历，将所有数字保存在nums数组中，如果str[i]出现小数点或字母，i位置之后的数字都视为无效。

5.先将nums中保存的数字转为字符串形式判断是否超界，如果没有则将其转为整型数字并返回。


clas.]]></description><category></category></item><item><title><![CDATA[leetcode 剑指 Offer 31. 栈的压入、弹出序列python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/122009800</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/122009800</guid><author>laurasam</author><pubDate>Sat, 18 Dec 2021 11:03:44 +0800</pubDate><description><![CDATA[题目描述：



题解：用栈模拟

创建一个栈astack（用list模拟），一个flag记录匹配到popped数组中的位置，将pushed中的每个数字依次压入astack，然后判断，如果当前栈顶的元素与popped数组flag位置匹配，则弹出栈顶元素，如果最终flag值与popped长度相同，则匹配，否则不匹配。


class Solution:
    def validateStackSequences(self, pushed: List[int], popped: List[int]) -&g.]]></description><category></category></item><item><title><![CDATA[leetcode 221. 最大正方形 python]]></title><link>https://blog.youkuaiyun.com/laurasam/article/details/121998417</link><guid>https://blog.youkuaiyun.com/laurasam/article/details/121998417</guid><author>laurasam</author><pubDate>Fri, 17 Dec 2021 16:00:28 +0800</pubDate><description><![CDATA[题目描述：



题解：动态规划

1.创建dp 大小为(matrix行+1）*(matrix列数+1) 初始化为全0

2.dp[i][j]表示以[i-1][j-1]为右下角坐标的全1正方形最大边长。

如果matrix[i-1][j-1]=='1'，dp[i][j]=1+min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])

3.返回最大边长值的平方。


class Solution:
    def maximalSquare(self, matrix: List[Lis.]]></description><category></category></item></channel></rss>