<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[MicoChen_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/MicoChen_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; MicoChen_]]></copyright><item><title><![CDATA[Leetcode_颜色分类]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120403388</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120403388</guid><author>MicoChen_</author><pubDate>Tue, 21 Sep 2021 17:15:09 +0800</pubDate><description><![CDATA[Leetcode_颜色分类题目题解
题目
给定一个包含红色、白色和蓝色，一共 n 个元素的数组，原地对它们进行排序，使得相同颜色的元素相邻，并按照红色、白色、蓝色顺序排列。
此题中，我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
&nbsp;
题解
思路：双指针交换元素。
 void sortColors(vector&lt;int&gt;&amp; nums) {
  int i = 0, j = nums.size() - 1;
    for(int k = 0; k &lt;= j; k]]></description><category></category></item><item><title><![CDATA[Leetcode_解码方法]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120403065</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120403065</guid><author>MicoChen_</author><pubDate>Tue, 21 Sep 2021 17:01:59 +0800</pubDate><description><![CDATA[Leetcode_解码方法题目题解
题目
一条包含字母 A-Z 的消息通过以下映射进行了 编码 ：
'A' -&gt; 1
'B' -&gt; 2
...
'Z' -&gt; 26

要 解码 已编码的消息，所有数字必须基于上述映射的方法，反向映射回字母（可能有多种方法）。例如，"11106" 可以映射为：

"AAJF" ，将消息分组为 (1 1 10 6)
"KJF" ，将消息分组为 (11 10 6)
注意，消息不能分组为  (1 11 06) ，因为 "06" 不能映射为 "F" ，这是由于 "6"]]></description><category></category></item><item><title><![CDATA[Leetcode_最后一个单词的长度]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120401093</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120401093</guid><author>MicoChen_</author><pubDate>Tue, 21 Sep 2021 13:56:47 +0800</pubDate><description><![CDATA[Leetcode_最后一个单词的长度题目题解
题目
给你一个字符串 s，由若干单词组成，单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
&nbsp;
题解
思路：直接倒序遍历排除开头空格。
class Solution {
public:
    int lengthOfLastWord(string s) {
        int count = 0;
        if(s.size() == 1) return 1;  //]]></description><category></category></item><item><title><![CDATA[Leetcode_数组中的第k个最大元素]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120400934</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120400934</guid><author>MicoChen_</author><pubDate>Tue, 21 Sep 2021 13:45:57 +0800</pubDate><description><![CDATA[Leetcode_数组中的第k个最大元素题目题解
题目
给定整数数组 nums 和整数 k，请返回数组中第 k 个最大的元素。
请注意，你需要找的是数组排序后的第 k 个最大的元素，而不是第 k 个不同的元素。
&nbsp;
题解
&nbsp;
思路1：直接调用 sort() 函数排序，然后返回第 k 大的元素。
class Solution {
public:
    int findKthLargest(vector&lt;int&gt;&amp; nums, int k) {
        sort]]></description><category></category></item><item><title><![CDATA[Leetcode_二叉树展开为链表]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120298239</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120298239</guid><author>MicoChen_</author><pubDate>Thu, 16 Sep 2021 16:02:06 +0800</pubDate><description><![CDATA[Leetcode_二叉树展开为链表题目题解
题目
给你二叉树的根结点 root ，请你将它展开为一个单链表：

展开后的单链表应该同样使用 TreeNode ，其中 right 子指针指向链表中下一个结点，而左子指针始终为 null 。
展开后的单链表应该与二叉树 先序遍历 顺序相同。
&nbsp;

题解
&nbsp;
思路1：先序遍历记录结点，然后按照记录的结点调整树的结构。
class Solution {
public:
    void flatten(TreeNode* root) {
    ]]></description><category></category></item><item><title><![CDATA[Leetcode_有效的括号字符串]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120278582</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120278582</guid><author>MicoChen_</author><pubDate>Tue, 14 Sep 2021 15:55:46 +0800</pubDate><description><![CDATA[Leetcode_有效的括号字符串题目题解
题目
给定一个只包含三种字符的字符串：( , ) 和 *，写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则：

任何左括号 ( 必须有相应的右括号 )。
任何右括号 ) 必须有相应的左括号 ( 。
左括号 ( 必须在对应的右括号之前 )。
* 可以被视为单个右括号 ) ，或单个左括号 ( ，或一个空字符串。
一个空字符串也被视为有效字符串。

&amp;nbsp：
题解
思路1：dp
考虑一串字符为有效括号串的情况：

字符串的头尾能构成一对()]]></description><category></category></item><item><title><![CDATA[Leetcode_找到需要补充粉笔的学生编号]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120252083</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120252083</guid><author>MicoChen_</author><pubDate>Sun, 12 Sep 2021 16:40:57 +0800</pubDate><description><![CDATA[Leetcode_找到需要补充粉笔的学生编号题目题解
题目
一个班级里有 n 个学生，编号为 0 到 n - 1 。每个学生会依次回答问题，编号为 0 的学生先回答，然后是编号为 1 的学生，以此类推，直到编号为 n - 1 的学生，然后老师会重复这个过程，重新从编号为 0 的学生开始回答问题。
给你一个长度为 n 且下标从 0 开始的整数数组 chalk 和一个整数 k 。一开始粉笔盒里总共有 k 支粉笔。当编号为 i 的学生回答问题时，他会消耗 chalk[i] 支粉笔。如果剩余粉笔数量 严格小于 ch]]></description><category></category></item><item><title><![CDATA[Leetcode_IPO]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120212065</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120212065</guid><author>MicoChen_</author><pubDate>Thu, 09 Sep 2021 23:38:06 +0800</pubDate><description><![CDATA[Leetcode_IPO题目题解
题目
假设 力扣（LeetCode）即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司，力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限，它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个不同项目后得到最大总资本的方式。
给定若干个项目。对于每个项目 i，它都有一个纯利润 Pi，并且需要最小的资本 Ci 来启动相应的项目。最初，你有 W 资本。当你完成一个项目时，你将获得纯利润，且利润将被添加到你的总资本中。
总而言]]></description><category></category></item><item><title><![CDATA[Leetcode_最长有效括号]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120169804</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120169804</guid><author>MicoChen_</author><pubDate>Wed, 08 Sep 2021 00:28:00 +0800</pubDate><description><![CDATA[Leetcode_最长有效括号题目题解
题目
给你一个只包含'('和')'的字符串，找出最长有效（格式正确且连续）括号子串的长度。
&nbsp;
题解
思路：一维数组dp。
主要考虑延长有效括号串情况。若s[i]为'('，那么无法与前一段有效括号串进行组合，无法延长，因此dp[i]置为0。
若s[i]为')'，考虑三种情况：一是在前一段有效括号串后增加一对括号，二是和一个'('括住一段有效括号串，三是无法进行组合。
尤其注意第二种情况，若与之匹配的'('与另一段有效括号串相邻（如:(()())(())的情况]]></description><category></category></item><item><title><![CDATA[Leetcode_三数之和]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120072006</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120072006</guid><author>MicoChen_</author><pubDate>Thu, 02 Sep 2021 23:31:17 +0800</pubDate><description><![CDATA[Leetcode_三数之和题目题解
题目
给你一个包含n个整数的数组nums，判断nums中是否存在三个元素 a，b，c ，使得 a + b + c = 0 ？请你找出所有和为0且不重复的三元组。
注意：答案中不可以包含重复的三元组。
&nbsp;
题解
思路：固定第一个数，对第二、三个数求“两数之和”。
vector&lt;vector&lt;int&gt;&gt; threeSum(vector&lt;int&gt;&amp; nums) {
  	if(nums.size() &lt; 3)  // ]]></description><category></category></item><item><title><![CDATA[Leetcode_链表中倒数第k个节点]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120066732</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120066732</guid><author>MicoChen_</author><pubDate>Thu, 02 Sep 2021 17:57:52 +0800</pubDate><description><![CDATA[Leetcode_链表中倒数第k个节点题目题解
题目
输入一个链表，输出该链表中倒数第k个节点。为了符合大多数人的习惯，本题从1开始计数，即链表的尾节点是倒数第1个节点。
例如，一个链表有6个节点，从头节点开始，它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
&nbsp;
题解
&nbsp;
思路1：先遍历计数再从头走size - k步，复杂度为O(2n - k)
ListNode* getKthFromEnd(ListNode* head, int k) {
   List]]></description><category></category></item><item><title><![CDATA[Leetcode_分裂二叉树的最大乘积]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120065277</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120065277</guid><author>MicoChen_</author><pubDate>Thu, 02 Sep 2021 17:22:20 +0800</pubDate><description><![CDATA[Leetcode_分裂二叉树的最大乘积题目题解
题目
给你一棵二叉树，它的根为root。请你删除 1 条边，使二叉树分裂成两棵子树，且它们子树和的乘积尽可能大。
由于答案可能会很大，请你将结果对 10^9 + 7 取模后再返回。
&nbsp;
题解
&nbsp;
思路：随意删除一条边，二叉树会分裂成某个结点的子树 + 剩下的部分。因此只需要递归求得所有的子树的结点和即可。
int maxProduct(TreeNode* root) {
   vector&lt;int&gt; sum;
    getsu]]></description><category></category></item><item><title><![CDATA[Leetcode_二叉树的后序遍历]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120061886</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120061886</guid><author>MicoChen_</author><pubDate>Thu, 02 Sep 2021 15:16:35 +0800</pubDate><description><![CDATA[Leetcode_二叉树的后序遍历题目题解
题目
给定一个二叉树，返回它的后序遍历。
&nbsp;
题解
递归版本很简单，在此跳过。
令人头疼的迭代版本：
 vector&lt;int&gt; postorderTraversal(TreeNode* root) {
   if(root == nullptr)
        return {};
    vector&lt;int&gt; num;
    stack&lt;TreeNode*&gt; s;
    TreeNode* prev;
   ]]></description><category></category></item><item><title><![CDATA[Leetcode_比较版本号]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120049075</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120049075</guid><author>MicoChen_</author><pubDate>Wed, 01 Sep 2021 21:28:46 +0800</pubDate><description><![CDATA[Leetcode_比较版本号题目题解
题目
给你两个版本号version1和version2，请你比较它们。
版本号由一个或多个修订号组成，各修订号由一个'.'连接。每个修订号由多位数字组成，可能包含前导零。每个版本号至少包含一个字符。修订号从左到右编号，下标从 0 开始，最左边的修订号下标为 0，下一个修订号下标为 1，以此类推。例如，2.5.33和0.1都是有效的版本号。
比较版本号时，请按从左到右的顺序依次比较它们的修订号。比较修订号时，只需比较忽略任何前导零后的整数值。也就是说，修订号1和修订号00]]></description><category></category></item><item><title><![CDATA[Leetcode_不同的二叉搜索树II]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120043444</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120043444</guid><author>MicoChen_</author><pubDate>Wed, 01 Sep 2021 16:44:37 +0800</pubDate><description><![CDATA[Leetcode_不同的二叉搜索树II题目题解
题目
给你一个整数n，请你生成并返回所有由n个节点组成且节点值从1到n互不相同的不同二叉搜索树。可以按任意顺序返回答案。
&nbsp;
题解
和上一题的思路类似。采用递归的方法分治得到两侧子树的所有情况。主要注意返回条件和递归参数。
vector&lt;TreeNode*&gt; GenerateTrees(int start, int end) {
        if(start &gt; end)
            return {nullptr}]]></description><category></category></item><item><title><![CDATA[Leetcode_不同的二叉搜索树]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120028607</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120028607</guid><author>MicoChen_</author><pubDate>Tue, 31 Aug 2021 22:44:02 +0800</pubDate><description><![CDATA[Leetcode_不同的二叉搜索树题目题解
题目
给你一个整数n，求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种？返回满足题意的二叉搜索树的种数。
&nbsp;
题解
思路：dp时间到！注意到二叉搜索树的性质使得当[1, n]中的某一个数m为根的时候，根的两侧分别为[1, m - 1]，[m + 1, n]。两侧都是连续的数字，且数量小于n，满足dp性质。所以从n = 0, 1的时候开始构建。对每一棵结点数固定的二叉搜索树，分别考虑[1, n]中每一个数为根的情况进行累加。
int numT]]></description><category></category></item><item><title><![CDATA[Leetcode_二叉树的中序遍历]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120021454</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120021454</guid><author>MicoChen_</author><pubDate>Tue, 31 Aug 2021 16:44:35 +0800</pubDate><description><![CDATA[Leetcode_二叉树的中序遍历题目题解
题目
给定一个二叉树的根节点root，返回它的中序遍历。
&nbsp;
题解
迭代速度&gt;递归。
vector&lt;int&gt; inorderTraversal(TreeNode* root) {
    vector&lt;int&gt; ans;
    if(root == nullptr)
        return ans;
    stack&lt;TreeNode*&gt; s;
    while(!s.empty() || root ]]></description><category></category></item><item><title><![CDATA[Leetcode_航班预定统计]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120019346</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120019346</guid><author>MicoChen_</author><pubDate>Tue, 31 Aug 2021 15:56:53 +0800</pubDate><description><![CDATA[Leetcode_航班预定统计题目题解
题目
这里有n个航班，它们分别从1到n进行编号。
有一份航班预订表bookings，表中第i条预订记录bookings[i] = [first i, last i, seats i]意味着在从first i到last i（包含first i和last i）的 每个航班 上预订了seats i个座位。
请你返回一个长度为n的数组answer，其中answer[i]是航班i上预订的座位总数。
题解
上来就暴力解结果超时。= =
思路：利用差分数组，由原数组每个元素减去前一]]></description><category></category></item><item><title><![CDATA[Leetcode_移除元素]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120008118</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120008118</guid><author>MicoChen_</author><pubDate>Mon, 30 Aug 2021 23:53:23 +0800</pubDate><description><![CDATA[Leetcode_移除元素题目题解
题目
给你一个数组nums和一个值val，你需要原地移除所有数值等于val的元素，并返回移除后数组的新长度。
不要使用额外的数组空间，你必须仅使用O(1)额外空间并原地修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
&nbsp;
题解
遇事不决双指针
int removeElement(vector&lt;int&gt;&amp; nums, int val) {
int slow_index = 0;
    for(int fast_in]]></description><category></category></item><item><title><![CDATA[Leetcode_括号生成]]></title><link>https://blog.youkuaiyun.com/MicoChen_/article/details/120006771</link><guid>https://blog.youkuaiyun.com/MicoChen_/article/details/120006771</guid><author>MicoChen_</author><pubDate>Mon, 30 Aug 2021 22:34:19 +0800</pubDate><description><![CDATA[Leetcode_括号生成题目题解
题目
数字n代表生成括号的对数，请你设计一个函数，用于能够生成所有可能的并且有效的括号组合。
有效括号组合需满足：左括号必须以正确的顺序闭合。
&nbsp;
题解
对dp有了新的认识（并不是所有dp都要建矩阵.jpg），执着于建矩阵最后还是没想出来，参考了两位大佬的解答。
&nbsp;
思路1：向上一级，即n-1个括号的合法组合中插入完整的"()"，以得到n个括号的合法组合。递归得到所有组合后通过unordered_map去重。
vector&lt;string&gt; ]]></description><category></category></item></channel></rss>