<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[m0_49024672的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/m0_49024672</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_49024672]]></copyright><item><title><![CDATA[【C++动态规划学习总结】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124991902</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124991902</guid><author>m0_49024672</author><pubDate>Thu, 26 May 2022 20:47:50 +0800</pubDate><description><![CDATA[1.动态规划：初识
动态规划（英语：Dynamic programming，简称 DP），是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的，通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。

实际上是对暴力递归的一种优化，把已经计算过的信息保存起来，下次要用时不用重复计算，并且通过求解动态数组的方式代替了函数的递归调用。

第一步优化在于对计算结果的存储，避免重复计算。可以优化成下面描述的记忆化搜索方法。
第二步优化在于对递归函]]></description><category></category></item><item><title><![CDATA[【C++ Morris算法遍历二叉树】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124927106</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124927106</guid><author>m0_49024672</author><pubDate>Mon, 23 May 2022 15:29:40 +0800</pubDate><description><![CDATA[Morris遍历二叉树：
指针建立：左子树最右结点指向当前结点，第二次访问该结点时还原，指向null

结点访问过程：

Morris算法流程：
1.如果当前结点没有左树，则当前结点右移，如果也没有右树，则右移后当前结点为空，直接退出
2.当前结点有左树时，遍历到左树的最右结点.
2.1 如果是第一次来到左子树最右结点，则将其右指针指向cur结点，cur左移（一次性将左子树上的回溯指针建立好）
2.2	如果第二次来到左子树最右结点，则将指针还原为空。cur右移（该左树已访问完成，继续到右树上遍历）

代码：]]></description><category></category></item><item><title><![CDATA[【C++二叉树节点间的最大距离问题】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124870738</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124870738</guid><author>m0_49024672</author><pubDate>Thu, 19 May 2022 20:51:36 +0800</pubDate><description><![CDATA[要点：
学习树形dp套路：分析可能性–&gt;左子树、右子树、整棵树的角度考虑
用递归先要左树信息和右数信息，然后再根据这些信息更新当前结点的信息

TIPS：
1.一定要注意递归时辅助变量的更新问题，此处qu不带引用会使初始化二叉树出错。
2.当前最大距离等于左树最大距离、右树最大距离、左右树高度和加一

代码：
参靠左神代码编写
#include &lt;iostream&gt;
#include &lt;queue&gt;
using namespace std;

struct Node //二叉树]]></description><category></category></item><item><title><![CDATA[【C++Manacher算法】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124750237</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124750237</guid><author>m0_49024672</author><pubDate>Fri, 13 May 2022 13:46:05 +0800</pubDate><description><![CDATA[Manacher算法：
Manachar算法主要是处理字符串中关于回文串的问题的，它可以在 O（n） 的时间处理出以字符串中每一个字符为中心的回文串半径，由于将原字符串处理成两倍长度的新串，在每两个字符之间加入一个特定的特殊字符，因此原本长度为偶数的回文串就成了以中间特殊字符为中心的奇数长度的回文串了

TIPS：

代码：
参考左神代码编写
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
using nam]]></description><category></category></item><item><title><![CDATA[【C++KMP算法】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124732987</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124732987</guid><author>m0_49024672</author><pubDate>Thu, 12 May 2022 16:21:16 +0800</pubDate><description><![CDATA[KMP算法：
KMP算法是一种改进的字符串匹配算法。KMP算法的关键是利用匹配失败后的信息，尽量减少模式串与主串的匹配次数以达到快速匹配的目的。–百度百科解释

算法过程：
1.算法分为两步，一步用于得到next数组，一步用于字符串比对
2.获得next数组时，类似于递推式的方式。先给出两个初始值next[0]，next[1]，然后计算i的next值时，在前一位置的基础上进行比较，比较成功则i位置的值直接加一。否则往前跳转，直到找到匹配值或者跳到首位置（next[i]=0）
3.对比时，相同则两个指针同时后]]></description><category></category></item><item><title><![CDATA[【C++岛问题】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124698718</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124698718</guid><author>m0_49024672</author><pubDate>Tue, 10 May 2022 22:20:35 +0800</pubDate><description><![CDATA[题目：
数组中相邻的1组成一个岛，求一个二维数组中岛的个数：
例如：下面矩阵岛数为4
0, 0, 1, 0, 1, 0,
1, 1, 1, 0, 1, 0
1, 0, 0, 1, 0, 0
0, 0, 0, 0, 1, 1

TIPS：

感染过程用递归法进行实现
二维数组指针int(*p)[] 需要打括号，int *p[]表示指针类型的数组

代码：
参考左神代码编写：
#include &lt;iostream&gt;
using namespace std;

void infect(int (*p)]]></description><category></category></item><item><title><![CDATA[【C++前缀树学习记录】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124460224</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124460224</guid><author>m0_49024672</author><pubDate>Wed, 27 Apr 2022 21:00:24 +0800</pubDate><description><![CDATA[前缀树：
Trie树，即字典树，又称单词查找树或键树，是一种树形结构，是一种哈希树的变种。典型应用是用于统计和排序大量的字符串（但不仅限于字符串），所以经常被搜索引擎系统用于文本词频统计。它的优点是：利用字符串的公共前缀来减少查询时间，最大限度地减少无谓的字符串比较。
前缀树的3个基本性质：
1.根节点不包含字符，除根节点外每一个节点都只包含一个字符。
2.从根节点到某一节点，路径上经过的字符连接起来，为该节点对应的字符串。
3.每个节点的所有子节点包含的字符都不相同。
Trie的核心思想是空间换时间。利用]]></description><category></category></item><item><title><![CDATA[【C++二叉树中两节点的最近公共祖先】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124406642</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124406642</guid><author>m0_49024672</author><pubDate>Mon, 25 Apr 2022 15:44:44 +0800</pubDate><description><![CDATA[题目要求：
给出二叉树的头结点和树上的两个节点，返回这两个节点最近的公共节点
思路：
递归套路：左树上返回需要的信息，右树上返回需要的信息，然后再根据头结点的信息返回当前节点的信息（类似于后序遍历的返回方式）

代码
参考左神代码编写
#include &lt;iostream&gt;
using namespace std;
struct Node
{
    int value;
    Node *left;
    Node *right;
    Node() : value(0), left(n]]></description><category></category></item><item><title><![CDATA[【C++二叉树的序列化和反序列化】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124394871</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124394871</guid><author>m0_49024672</author><pubDate>Mon, 25 Apr 2022 00:11:23 +0800</pubDate><description><![CDATA[二叉树序列化和反序列化：
预期目标：
序列化：将链表化为类似于1_2_##3##_的形式，#代表指针指向为空。
反序列化：将序列化后的数据还原为二叉树
要点：

1.数据类型转换：int -&gt; string  、string -&gt; int 分别用to_string 和 atoi(x.c_str())实现
2.序列化后数据用队列储存，不使用下标取值，方便运用递归方法。
3.将string数据分解为子string问题。


代码：
参考左神代码编写
#include &lt;iostream&gt;]]></description><category></category></item><item><title><![CDATA[【C++判断二叉树是否为搜索二叉树、完全二叉树和平衡二叉树】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124285389</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124285389</guid><author>m0_49024672</author><pubDate>Tue, 19 Apr 2022 22:32:07 +0800</pubDate><description><![CDATA[判断二叉树是否为搜索二叉树和完全二叉树：
搜索二叉树：若它的左子树不空，则左子树上所有结点的值均小于它的根结点的值； 若它的右子树不空，则右子树上所有结点的值均大于它的根结点的值
完全二叉树：叶子结点只能出现在最下层和次下层，且最下层的叶子结点集中在树的左部

代码：
参考左神代码编写
#include &lt;iostream&gt;
#include &lt;queue&gt;
using namespace std;

struct Node
{
    int value;
    Node *le]]></description><category></category></item><item><title><![CDATA[【C++二叉树创建和遍历】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124261635</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124261635</guid><author>m0_49024672</author><pubDate>Mon, 18 Apr 2022 22:54:35 +0800</pubDate><description><![CDATA[学习内容：
分别用递归和非递归实现二叉树的先序，中序，后序遍历
二叉树的创建
先序：头左右
中序：左头右
后序：左右头
要点：

递归方式遍历时，先序是第一次进入函数就打印，先打印的是头结点然后再打印左节点和右节点。中序是第一次回到函数时打印，此时左节点已经打印，当前打印的是头结点，之后再打印右节点。后序是第二次回到函数时打印，此时左右节点都已打印，当前打印的是头结点。

                   1
                /      \
              2       ]]></description><category></category></item><item><title><![CDATA[【Leetcode两数相加】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124118834</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124118834</guid><author>m0_49024672</author><pubDate>Tue, 12 Apr 2022 11:30:34 +0800</pubDate><description><![CDATA[提示：文章写完后，目录可以自动生成，如何生成可参考右边的帮助文档

Leetcod刷题记录前言一、pandas是什么？二、使用步骤1.引入库2.读入数据总结

前言
提示：这里可以添加本文要记录的大概内容：
例如：随着人工智能的不断发展，机器学习这门技术也越来越重要，很多人都开启了学习机器学习，本文就介绍了机器学习的基础内容。

提示：以下是本篇文章正文内容，下面案例可供参考
一、pandas是什么？
示例：pandas 是基于NumPy 的一种工具，该工具是为了解决数据分析任务而创建的。
二、使用步骤
.]]></description><category></category></item><item><title><![CDATA[【C++堆排序学习总结】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/124014192</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/124014192</guid><author>m0_49024672</author><pubDate>Thu, 07 Apr 2022 14:10:40 +0800</pubDate><description><![CDATA[算法图解：

代码
可理解为二叉树中的冒泡法。
参考左神代码编写
#include &lt;iostream&gt;
using namespace std;

void swap(int arr[], int index1, int index2)
{
    int temp;
    temp = arr[index1];
    arr[index1] = arr[index2];
    arr[index2] = temp;
}

void show(int a[], int len)
{
  ]]></description><category></category></item><item><title><![CDATA[【C++快速排序学习总结】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/123890735</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/123890735</guid><author>m0_49024672</author><pubDate>Fri, 01 Apr 2022 11:09:10 +0800</pubDate><description><![CDATA[算法图解：
情况1：当前值小于所指向值

情况2：当前值大于所指向值

情况3：当前值等于所指向值


代码
遇到的问题：partition返回中间段的左右边界数据，选用结构体进行返回
参考左神代码编写
#include &lt;iostream&gt;
#include &lt;ctime&gt;
using namespace std;

struct mydata
{
    int position1 = 0;  //The left border of the middle area
    in]]></description><category></category></item><item><title><![CDATA[【C++归并排序学习总结】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/123868901</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/123868901</guid><author>m0_49024672</author><pubDate>Thu, 31 Mar 2022 12:58:04 +0800</pubDate><description><![CDATA[学习总结：
归并排序图解：

–图片来自必应图片搜素
小技巧：
M = L + ((R - L) &gt;&gt; 1)；//求两数平均值，可避免数据溢出

代码实现
参考左神代码编写
学习视频地址
#include &lt;iostream&gt;
using namespace std;

void merge(int arr[], int L, int M, int R)
{
    int *temp = new int[R - L + 1]; // store temporary sorted a]]></description><category></category></item><item><title><![CDATA[【C++指针偏移问题】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/123818892</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/123818892</guid><author>m0_49024672</author><pubDate>Tue, 29 Mar 2022 13:39:07 +0800</pubDate><description><![CDATA[学习记录：
练习选择排序遇到的指针偏移问题

问题描述
数组首地址偏移a+1与&amp;a+1效果不同，前者是指针指向数组中下一元素（数组元素地址指针），后者是指向下一数组（数组指针）
//数组元素偏移
int main()
{    
    int a[]={5,5,8,4,6,9,3};
    int *p1=a;
    int *p2=(int *)(a+1);
    cout&lt;&lt;"p1="&lt;&lt;p1&lt;&lt;endl&lt;&lt;"*p1="&lt;&lt;*p]]></description><category></category></item><item><title><![CDATA[【C++中传递数组到函数时求数组长度问题】]]></title><link>https://blog.youkuaiyun.com/m0_49024672/article/details/123815249</link><guid>https://blog.youkuaiyun.com/m0_49024672/article/details/123815249</guid><author>m0_49024672</author><pubDate>Tue, 29 Mar 2022 10:59:51 +0800</pubDate><description><![CDATA[学习记录：
最近学习c++时遇到传递数组到函数的问题，将数组作为实参传递给函数时，传递的是数组首地址，对形参使用sizeof()函数会返回数组变量的字节长度。
解决办法为：
问题描述
学习场景：
学习左神刷题挑战时，练习选择排序时遇到：
#include&lt;iostream&gt;
using namespace std;
class Mysort
{
    public:
    void Dosort(int a[],int len);
};

void Mysort::Dosort(int a[]]></description><category></category></item></channel></rss>