<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_35904005的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_35904005</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_35904005]]></copyright><item><title><![CDATA[代码随想录算法训练营 DAY 27 | 93.复原IP地址 78.子集 90.子集II]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/137541351</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/137541351</guid><author>qq_35904005</author><pubDate>Tue, 09 Apr 2024 10:23:02 +0800</pubDate><description><![CDATA[如果把 子集问题、组合问题、分割问题都抽象为一棵树的话，那么组合问题和分割问题都是收集树的叶子节点，而子集问题是找树的所有节点！子集，组合，分割问题，回溯算法的for都是从startIndex开始！无序，取过的元素不会重复取）排列问题的for是从0开始！（有序，[1,2]和[2,1]是两个）子集问题进入递归就先收集结果（收集的其实是上一层的）-如果nums有重复元素，先排序。树枝去重用used数组（），continue跳到下一个i。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 27 | 39.组合总和 40.组合总和 II 131.分割回文串]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/137526863</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/137526863</guid><author>qq_35904005</author><pubDate>Mon, 08 Apr 2024 22:43:31 +0800</pubDate><description><![CDATA[虽然都是一进for循环里就判断，但一个是continue一个是break！continue代表跳到下一个i+1开始搜，不进入下一层递归。break代表直接结束整个for循环，终止搜索！初始化used数组可以用切割回文串问题要联想到组合问题，startIndex相当于切割线，终止条件就是起始位置≥s的长度。在单层逻辑里判断是不是回文串，是就直接substring收集子串，不是就continue（直接跳到下一个i，不会进入下一层递归）。这样可以直接在终止条件里收集path了。substring是左闭右开！！]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 25 | 216.组合总和III 17.电话号码的字母组合]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/137176947</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/137176947</guid><author>qq_35904005</author><pubDate>Sat, 30 Mar 2024 16:45:14 +0800</pubDate><description><![CDATA[数字的list恢复现场用，path数组是LinkedList字符串恢复现场用电话号码题用String数组保存映射关系。取出String每一位上的可以直接单层递归逻辑里for循环的次数就是 这一位上能填的值的情况总数！]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 24 | 回溯理论基础 77.组合 + 剪枝优化]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/137158289</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/137158289</guid><author>qq_35904005</author><pubDate>Fri, 29 Mar 2024 22:41:56 +0800</pubDate><description><![CDATA[举个例子：假设n=4,k=3，path里0个元素。至多从4-(3-0)+1=2，至多从2开始。剪枝剪的是孩子，在for循环里完成的，修改i开始遍历的位置，如果元素个数不够了就提前剪掉。子集问题 1 2 3 4，子集有1 2 3 4,12,13,14，…for循环，用path收集路径上的元素，然后递归下一层（起始位置i+1）+恢复现场。(列表剩余元素数目>=所需元素数目)，加不加1依照实际情况决定。组合（无顺序） 1 2 3 4 给出大小为2的所有组合。抽象成一个n叉树，树的宽度就是集合的大小。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 23 | 450.删除二叉搜索树中的节点 669.修剪二叉搜索树 538.把二叉搜索树转换为累加树]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/137124861</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/137124861</guid><author>qq_35904005</author><pubDate>Thu, 28 Mar 2024 21:21:33 +0800</pubDate><description><![CDATA[深度优先[二叉树：前中后序递归法：递归三部曲初次亮相[二叉树：前中后序迭代法（一） ：通过栈模拟递归[二叉树：前中后序迭代法（二）统一风格]广度优先[二叉树的层序遍历]：通过队列模拟。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 22 | 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/137098291</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/137098291</guid><author>qq_35904005</author><pubDate>Thu, 28 Mar 2024 09:17:47 +0800</pubDate><description><![CDATA[利用二叉搜索树的性质从上到下去遍历，遇到 cur节点是数值在[p, q]区间中则一定可以说明该节点cur就是p 和 q的公共祖先。问题来了，？如果 从节点5继续向左遍历，那么将错过成为p的祖先， 如果从节点5继续向右遍历则错过成为q的祖先。所以当我们从上向下去递归遍历，第一次遇到 cur节点是数值在[q, p]区间中，那么cur就是 q和p的最近公共祖先。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 21 | 230.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236.二叉树的最近公共祖先]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/137074342</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/137074342</guid><author>qq_35904005</author><pubDate>Wed, 27 Mar 2024 13:10:09 +0800</pubDate><description><![CDATA[用一个全局变量result存储最小绝对差，prev指针存储在中的逻辑里去更新result（保证prev不为空），然后更新prev=cur。牢记谦虚遍历的顺序！pre紧跟在cur后面移动。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 20 | 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/137039314</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/137039314</guid><author>qq_35904005</author><pubDate>Tue, 26 Mar 2024 10:49:53 +0800</pubDate><description><![CDATA[二叉搜索树 中序遍历结果是有序的构造二叉树 用前序遍历。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 18 | 513.找树左下角的值 513.找树左下角的值 106.从中序与后序遍历序列构造二叉树]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/137005008</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/137005008</guid><author>qq_35904005</author><pubDate>Mon, 25 Mar 2024 09:53:50 +0800</pubDate><description><![CDATA[递归函数什么时候需要返回值？如果需要搜索整棵二叉树且不用处理递归返回值，递归函数就不要返回值。如果需要搜索整棵二叉树且需要处理递归返回值，递归函数就需要返回值。如果要搜索其中一条符合条件的路径，那么递归一定需要返回值，因为遇到符合条件的路径了就要及时返回。（本题的情况）list：add(E)：在末尾增加元素add(int, E)：在指定位置增加元素remove(int)：删除指定位置的元素remove(Object)：删除指定元素set(int, E)：修改指定位置的元素。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 17 | 110.平衡二叉树 257.二叉树的所有路径 404.左叶子之和]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136953009</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136953009</guid><author>qq_35904005</author><pubDate>Fri, 22 Mar 2024 21:59:11 +0800</pubDate><description><![CDATA[List可以用获取第i个元素List用删除第i个元素List长度是StringBuilder转换为String用。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 16 | 104.二叉树最大深度 111.二叉树最小深度 222.完全二叉树的节点个数]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136923033</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136923033</guid><author>qq_35904005</author><pubDate>Thu, 21 Mar 2024 22:38:16 +0800</pubDate><description><![CDATA[把左和右递归遍历的操作放到一个for循环里，遍历node.children 得到depth，最后return depth+1即可！对于情况二，分别递归左孩子，和右孩子，递归到某一深度一定会有左孩子或者右孩子为满二叉树，然后依然可以按照情况1来计算。核心思路：利用完全二叉树特性，因为题目是完全二叉树，直接全部遍历左孩子和右孩子，如果高度相等它就是满二叉树，直接。完全二叉树只有两种情况，情况一：就是满二叉树，情况二：最后一层叶子节点没有满。前序遍历和后序遍历都可以，前序求的是深度，后序求的是高度。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 15 | 二叉树的层序遍历 226.翻转二叉树 101.对称二叉树]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136892146</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136892146</guid><author>qq_35904005</author><pubDate>Wed, 20 Mar 2024 23:56:02 +0800</pubDate><description><![CDATA[我们是用队列来保存元素。同时，用来表示一层有几个节点。遍历每一层（每一层遍历size次）的同时，把它的左右孩子都入队（插入队尾）（如果有的话）。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 14 | 二叉树的递归遍历和迭代遍历]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136855391</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136855391</guid><author>qq_35904005</author><pubDate>Tue, 19 Mar 2024 21:04:55 +0800</pubDate><description><![CDATA[int val;Collections.reverse(传一个list)确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑迭代遍历，先看前序。用栈来模拟迭代遍历。一共分为两步操作：访问节点+处理节点前序：中 左 右。但是按照右-左顺序入栈后序就是交换左右顺序，然后整个res反转。迭代遍历中序：需要一个指针cur帮助我们遍历二叉树，处理的时候把元素加入到res数组里。非空就入栈，指针往左走，当前为空了就出栈 同时输出到数组 往右走！]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 13 | 239.滑动窗口最大值 347.前 K 个高频元素]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136821076</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136821076</guid><author>qq_35904005</author><pubDate>Mon, 18 Mar 2024 20:43:24 +0800</pubDate><description><![CDATA[比较一下队列和栈相关方法的不同：队列：add()：在队尾添加元素remove()：删除并返回队头isEmpty()：是否为空栈：push()：压入元素pop()：弹出栈顶元素，并返回栈顶元素peek()：返回栈顶元素empty()：是否为空其他求长度size()，求堆头/栈顶peek()和清空clear()都是一样的！注意在java中，栈是一个实现类。而队列是一个接口，实现类有LinkedList和PriorityQueue关于deque队头元素：deque.peek()]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 11 | 20.有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136768149</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136768149</guid><author>qq_35904005</author><pubDate>Sat, 16 Mar 2024 19:30:31 +0800</pubDate><description><![CDATA[相邻字符消除的操作，很多用栈来解决！栈与递归之间在某种程度上是可以转换的遍历字符串数组可以用String转数字用deque，尤其是ArrayDeque实现类当做栈比Stack更快！注意遍历顺序和出栈顺序是相反的！具体实现要变一下。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY 10 | 232.用栈实现队列 225.用队列实现栈]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136747983</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136747983</guid><author>qq_35904005</author><pubDate>Fri, 15 Mar 2024 19:20:12 +0800</pubDate><description><![CDATA[比较一下队列和栈相关方法的不同：队列：add()：在队尾添加元素remove()：删除并返回队头isEmpty()：是否为空栈：push()：压入元素pop()：弹出栈顶元素，并返回栈顶元素push()：压入元素pop()：弹出栈顶元素，并返回栈顶元素peek()：返回栈顶元素其他求长度size()，求堆头/栈顶peek()和清空clear()都是一样的！注意在java中，栈是一个实现类。而队列是一个接口，实现类有LinkedList和PriorityQueue。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY9 | 被KMP击碎的一天 总结回顾字符串和双指针]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136724089</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136724089</guid><author>qq_35904005</author><pubDate>Thu, 14 Mar 2024 22:38:51 +0800</pubDate><description><![CDATA[next数组就是一个前缀表（prefix table）。前缀表有什么作用呢？前缀表是用来回退的，它记录了模式串与主串(文本串)不匹配的时候，模式串应该从哪里开始重新匹配。举一个例子：要在文本串：aabaabaafa 中查找是否出现过一个模式串：aabaaf。可以看出，文本串中第六个字符b 和 模式串的第六个字符f，不匹配了。如果暴力匹配，发现不匹配，此时就要从头匹配了。但如果使用前缀表，就不会从头匹配，而是从上次已经匹配的内容开始匹配，找到了模式串中第三个字符b继续开始匹配。为啥能移动到b？]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY8 | 344.反转字符串 541.反转字符串II 卡码网54.替换数字 151.反转字符串中的单词 卡码网55.右旋字符串]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136680174</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136680174</guid><author>qq_35904005</author><pubDate>Wed, 13 Mar 2024 15:00:41 +0800</pubDate><description><![CDATA[java中String是不可变的。可以考虑新建一个然后用append拼接，或者用方法转化成char数组再进行操作。最后返回的时候。左旋/右旋字符串：先整体反转，再分别反转左半部分和右半部分即可swap方法可以用tmp或者位运算实现。注意是左闭右闭的去除一个字符串中多余空格的逻辑比较复杂，回顾移除数组那道题里的实现，用快慢指针，slow指向符合的元素要放的位置，fast指针遍历整个串 去找不为空格的字符。放完一个单词之后要手动添加一个空格（注意首个字符的情况 不用放）]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY7|454.四数相加II 383.赎金信 15.三数之和 18.四数之和]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136659083</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136659083</guid><author>qq_35904005</author><pubDate>Tue, 12 Mar 2024 17:58:28 +0800</pubDate><description><![CDATA[list操作：Arrays.asList(num1,num2,num3)可以把几个数转换成list返回！map.getOrDefault(key,默认值)如果有对应的key，返回value，如果没有返回默认值。可以用来简化统计出现次数的操作。三数之和 和 四数之和思路相近，都是遍历一个i或者i和j，拿着这个，用双指针对后面的进行判断。去重和剪枝的细节需要注意。]]></description><category></category></item><item><title><![CDATA[代码随想录算法训练营 DAY6| 242.有效的字母异位词 349.两个数组的交集 202.快乐数 1.两数之和]]></title><link>https://blog.youkuaiyun.com/qq_35904005/article/details/136635696</link><guid>https://blog.youkuaiyun.com/qq_35904005/article/details/136635696</guid><author>qq_35904005</author><pubDate>Mon, 11 Mar 2024 21:27:30 +0800</pubDate><description><![CDATA[2.选择数组，set，map的原则元素比较少，范围可控，元素较为连续  —选数组数值比较大，元素很分散 —选set有key value对应 —选map3.数组如果要动态添加元素，就要用ArrayList。4.如何取每个位置上的单数？​    }5.如果有一个重复性高的需求，考虑另外单独写成一个方法。如：getSum()方法 求每个位置上数的平方和6.HashSet对应的方法//初始化//添加元素//返回set的大小set.size();//查询是否含有某元素。]]></description><category></category></item></channel></rss>