<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[t1471464672的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/t1471464672</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; t1471464672]]></copyright><item><title><![CDATA[入职第二周，上了三天班又放假啦  回溯套路]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106965982</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106965982</guid><author>t1471464672</author><pubDate>Sun, 28 Jun 2020 00:12:46 +0800</pubDate><description><![CDATA[回溯算法的模板：
不合适就退回上一步
result = []
def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择

子集问题：要用 start 参数排除已选择的数字
组合问题利用的是回溯思想，结果可以表示成树结构，我们只要套用回溯算法模板即可，关键点在于要用一个]]></description><category></category></item><item><title><![CDATA[力扣入职第一周，啥也不是呜呜呜呜]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106781221</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106781221</guid><author>t1471464672</author><pubDate>Sun, 21 Jun 2020 22:58:52 +0800</pubDate><description><![CDATA[297. 二叉树的序列化与反序列化

前序遍历
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Codec:

    def serialize(self, root):
        """Encod]]></description><category></category></item><item><title><![CDATA[6.12 要收拾东西了!这两天无心做题，希望去实习一切顺利！]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106699357</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106699357</guid><author>t1471464672</author><pubDate>Fri, 12 Jun 2020 23:18:05 +0800</pubDate><description><![CDATA[1217. 玩筹码

不改变筹码位置的奇偶性时代价为0
改变奇偶性的代价为1
class Solution:
    def minCostToMoveChips(self, chips: List[int]) -&gt; int:
        a,b=0,0
        for i in chips:
            if i&amp;1:
                a+=1
            else:
                b+=1
        return ]]></description><category></category></item><item><title><![CDATA[6.11 力扣 一开始不想做题效率就下来了 回溯法(全排列问题）]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106690205</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106690205</guid><author>t1471464672</author><pubDate>Thu, 11 Jun 2020 23:23:30 +0800</pubDate><description><![CDATA[365. 水壶问题

数学方法：
每次操作只会让桶里的水总量增加 x，增加 y，减少 x，或者减少 y，两个桶不可能同时有水且不满。操作的结果都至少有一个桶是空的或者满的；
我们可以认为每次操作只会给水的总量带来 x 或者 y 的变化量。两个壶中水的总量一定为：ax+by，a,b是整数，因此我们的目标可以改写成：找到一对整数 a,b，使得 ax+by==z，且z&lt;=x+y
贝祖定理：若x,y是整数,且gcd(x,y)=d，那么对于任意的整数a,b,ax+by都一定是d的倍数，特别地，一定存在整数a,b]]></description><category></category></item><item><title><![CDATA[6.10力扣 10号出去逛街了，11号补上！ 打印n位数]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106630380</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106630380</guid><author>t1471464672</author><pubDate>Thu, 11 Jun 2020 15:32:05 +0800</pubDate><description><![CDATA[154 153
557. 反转字符串中的单词 III

class Solution:
    def reverseWords(self, s: str) -&gt; str:
        arr=s.split(' ')
        res=[]
        for i in arr:
            res.append(i[::-1])
        return ' '.join(res)

345. 反转字符串中的元音字母

class Solution:
    def ]]></description><category></category></item><item><title><![CDATA[6.9 力扣 相似度为K的字符串（写不出来，BFS） 拓扑排序]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106609978</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106609978</guid><author>t1471464672</author><pubDate>Tue, 09 Jun 2020 15:37:56 +0800</pubDate><description><![CDATA[326. 3的幂

math.log(m,n)
n为底数，m为真数(即幂)
class Solution:
    def isPowerOfThree(self, n: int) -&gt; bool:
        if n&lt;=0:
            return False
        ans=math.log(n,3)
        if n==3**round(ans):
            return True
        return False

342 4的幂]]></description><category></category></item><item><title><![CDATA[6.8 力扣 二分法]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106602171</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106602171</guid><author>t1471464672</author><pubDate>Mon, 08 Jun 2020 22:30:48 +0800</pubDate><description><![CDATA[509. 斐波那契数


时间复杂度O(N)
空间复杂度O(1)
class Solution:
    def fib(self, N: int) -&gt; int:
        a,b=0,1
        count=2
        while count&lt;=N:
            a,b=b,a+b
            count+=1
        return b if N&gt;=2 else N

873. 最长的斐波那契子序列的长度

递增数组，以两个数作为数]]></description><category></category></item><item><title><![CDATA[6.7力扣 最长公共子序列变种   贪心算法  窝工生日快乐！]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106592136</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106592136</guid><author>t1471464672</author><pubDate>Sun, 07 Jun 2020 15:21:19 +0800</pubDate><description><![CDATA[712. 两个字符串的最小ASCII删除和

法一：动态规划求得是删除的字符值最小的结果
dp[i][j]表示s1以i结尾，s2以j为结尾的字符串之间使ascii值相等，需要删除字符和的最小值
如果s1[i]==s2[j]，那么dp[i][j]=dp[i-1][j-1],当前元素相等，不需要删除
如果不相等，则删除其中一个字符串的最后一个元素，到底删除哪一个就看是哪一个字符加到分别对应的上一个dp上能使当前dp最小
需要将边界初始化，边界是其中一个字符串为空，dp值为另一个字符串的ascii值的累加和
dp]]></description><category></category></item><item><title><![CDATA[6.6 吉利的一天！ 最长上升子序列（三种方法）]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106579235</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106579235</guid><author>t1471464672</author><pubDate>Sat, 06 Jun 2020 18:40:35 +0800</pubDate><description><![CDATA[1337. 方阵中战斗力最弱的 K 行



class Solution:
    def kWeakestRows(self, mat: List[List[int]], k: int) -&gt; List[int]:
    #每一行最左边的0
        def binary(num):
            left,right=0,len(num)-1
            while left&lt;right:
                mid=left+(right-lef]]></description><category></category></item><item><title><![CDATA[6.5 力扣 今天是发愁开题的一天]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106556359</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106556359</guid><author>t1471464672</author><pubDate>Fri, 05 Jun 2020 21:01:58 +0800</pubDate><description><![CDATA[1331. 数组序号转换


class Solution:
    def arrayRankTransform(self, arr: List[int]) -&gt; List[int]:
        ans=sorted(list(set(arr)))
        hashmap={}
        for i,value in enumerate(ans):
            hashmap[value]=i+1
        return [ hashmap[j] for j i]]></description><category></category></item><item><title><![CDATA[6.4 力扣 买卖股票六道动态规划（三维，穷举状态 好难，多看题解）]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106533754</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106533754</guid><author>t1471464672</author><pubDate>Thu, 04 Jun 2020 19:16:49 +0800</pubDate><description><![CDATA[243 最短单词距离

class Solution(object):
    def shortestDistance(self, words, word1, word2):
        """
        :type words: List[str]
        :type word1: str
        :type word2: str
        :rtype: int
        """
        res = len(words) - 1
        pos1,]]></description><category></category></item><item><title><![CDATA[6.3 力扣 栈]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106479313</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106479313</guid><author>t1471464672</author><pubDate>Wed, 03 Jun 2020 20:40:44 +0800</pubDate><description><![CDATA[1003. 检查替换后的词是否有效


就是一直消除 abc 的字符串。
依次遍历S中的每个字符，如果当前字符为c,判断栈顶两个字符是不是b和a,如果是，两次退栈， 否则可直接判断S不是有效的字符串， 当前前提是先判断栈中元素个数是不是大于2，如果不是，直接判断无效。如果是 字符a 和b直接入栈。
class Solution:
    def isValid(self, S: str) -&gt; bool:
        stack=[]
        for c in S:
           ]]></description><category></category></item><item><title><![CDATA[6.2 力扣   括号题几乎都和栈有关]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106460342</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106460342</guid><author>t1471464672</author><pubDate>Tue, 02 Jun 2020 20:16:08 +0800</pubDate><description><![CDATA[1370. 上升下降字符串



桶排序，将26个字母作为26个桶，统计每个字母出现次数

class Solution:
    def sortString(self, s: str) -&gt; str:
        h=[0]*26
        for i in s:
            h[ord(i)-97]+=1
        res=[]
        n=len(s)
        while True:
            if len(res)==n:
     ]]></description><category></category></item><item><title><![CDATA[6.1力扣栈  期待offer的儿童节礼物！]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106446216</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106446216</guid><author>t1471464672</author><pubDate>Mon, 01 Jun 2020 00:40:34 +0800</pubDate><description><![CDATA[56. 合并区间

class Solution:
    def merge(self, intervals: List[List[int]]) -&gt; List[List[int]]:
        if not intervals:
            return intervals
        intervals=sorted(intervals,key=lambda x:(x[0],x[1]))
        res=[]
        res.append(intervals]]></description><category></category></item><item><title><![CDATA[5.31 力扣 栈]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106435679</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106435679</guid><author>t1471464672</author><pubDate>Sun, 31 May 2020 20:04:49 +0800</pubDate><description><![CDATA[面试题09. 用两个栈实现队列

class CQueue:
#栈先进后出，队列先进先出
    def __init__(self):
        self.stack1=[]
        self.stack2=[]

    def appendTail(self, value: int) -&gt; None:
        while self.stack2:
            self.stack1.append(self.stack2.pop())
        self.s]]></description><category></category></item><item><title><![CDATA[5.30 力扣 二分查找  几何题]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106415962</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106415962</guid><author>t1471464672</author><pubDate>Sat, 30 May 2020 00:15:50 +0800</pubDate><description><![CDATA[278. 第一个错误的版本

# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):

class Solution:
    def firstBadVersion(self, n):
        """
        :type n: int
        :rtype: int
        """]]></description><category></category></item><item><title><![CDATA[5.29力扣 二分查找]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106394694</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106394694</guid><author>t1471464672</author><pubDate>Fri, 29 May 2020 00:52:42 +0800</pubDate><description><![CDATA[395. 至少有K个重复字符的最长子串

滑动窗口：
每次都要重新遍历整个字符串
class Solution:
    def longestSubstring(self, s: str, k: int) -&gt; int:
        max_num=len(set(s))
        res=0
        for i in range(1,max_num+1):
            #当不同字符个数为i时，最长字符串的长度
            res=max(res,self.]]></description><category></category></item><item><title><![CDATA[5.28 力扣 字符匹配解码]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106362515</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106362515</guid><author>t1471464672</author><pubDate>Thu, 28 May 2020 00:47:18 +0800</pubDate><description><![CDATA[1171 从链表中删去总和值为零的连续节点


前缀和 用字典 前缀和存指针
两个结点的前缀和相等，说明两个结点之间和为0、
如果后面前缀和等于前面的前缀和，则用后面的结点覆盖前面的结点
然后重构结点
申请当前节点的前缀和sum为key，当前节点指针为value的哈希表
class Solution:
    def removeZeroSumSublists(self, head: ListNode) -&gt; ListNode:
        seen=dict()
        dummy=Li]]></description><category></category></item><item><title><![CDATA[5.27 力扣链表]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106346343</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106346343</guid><author>t1471464672</author><pubDate>Wed, 27 May 2020 23:29:43 +0800</pubDate><description><![CDATA[581. 最短无序连续子数组

排序后比较两个数组最左边和最右边不一致的元素
超时
class Solution:
    def findUnsortedSubarray(self, nums: List[int]) -&gt; int:
        l,r=len(nums),0
        for i in range(len(nums)-1):
            for j in range(i,len(nums)):
                if nums[i]&gt;num]]></description><category></category></item><item><title><![CDATA[5.26力扣  字符串处理 双指针]]></title><link>https://blog.youkuaiyun.com/t1471464672/article/details/106324913</link><guid>https://blog.youkuaiyun.com/t1471464672/article/details/106324913</guid><author>t1471464672</author><pubDate>Tue, 26 May 2020 00:48:45 +0800</pubDate><description><![CDATA[146. LRU缓存机制

我们用一个哈希表和一个双向链表维护所有在缓存中的键值对
我们首先使用哈希表进行定位，找出缓存项在双向链表中的位置，随后将其移动到双向链表的头部，即可在 O(1) 的时间内完成 get 或者 put 操作。


在双向链表的实现中，使用一个伪头部（dummy head）和伪尾部（dummy tail）标记界限，这样在添加节点和删除节点的时候就不需要检查相邻的节点是否存在。
每次添加新节点都将节点添加到头部，每次删除节点都删除尾部节点
#定义双向链表
class listnode:
]]></description><category></category></item></channel></rss>