<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>数据结构与算法 on Clarity</title>
    <link>https://gb.yeadoc.com/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/</link>
    <description>Recent content in 数据结构与算法 on Clarity</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <copyright>Copyright © 2008–2018, Steve Francia and the Hugo Authors; all rights reserved.</copyright>
    <lastBuildDate>Sun, 24 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://gb.yeadoc.com/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>堆</title>
      <link>https://gb.yeadoc.com/2026/05/24/%E5%A0%86/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://gb.yeadoc.com/2026/05/24/%E5%A0%86/</guid>
      <description>
        
          
            &lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%A0%86/#插入节点&#34;&gt;插入节点&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%A0%86/#删除堆顶&#34;&gt;删除堆顶&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%A0%86/#建堆&#34;&gt;建堆&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%A0%86/#复杂度&#34;&gt;复杂度&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;堆是一棵完全二叉树，使用数组实现堆，堆分为两种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最大堆：父节点大于任意子节点（因此堆顶为最大值）&lt;/li&gt;
&lt;li&gt;最小堆：父节点小于任意子节点（因此堆顶为最小值）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于第i个节点（i从0开始计数）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;父节点：&lt;code&gt;(i-1)/2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;左子节点：&lt;code&gt;2i+1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;右子节点：&lt;code&gt;2i+2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;若包含&lt;code&gt;sz&lt;/code&gt;个节点，则第一个非叶子节点的序号为&lt;code&gt;(sz - 2) / 2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;
  &lt;picture&gt;

    
      
        
        
        
        
        
        
    &lt;img
      loading=&#34;lazy&#34;
      decoding=&#34;async&#34;
      alt=&#34;&#34;
      
        class=&#34;image_figure image_internal image_unprocessed&#34;
        src=&#34;https://gb.yeadoc.com/pic/al-tree-2.png&#34;
      
      
    /&gt;

    &lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&#34;插入节点&#34;&gt;插入节点&lt;/h2&gt;
&lt;p&gt;插入节点时，进行下列操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将元素添加到数组末尾；（相当于叶节点接入堆中）&lt;/li&gt;
&lt;li&gt;和父节点进行比较，如果大于父节点(以最大堆为例)，则与父节点交换，一直比较交换到根节点&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/********************************************
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 向堆中插入元素
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *  hole：新元素所在的位置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; ********************************************/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_push_heap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//取出新元素，从而产生一个空洞
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//建最大堆，如果建最小堆换成 arr[parent] &amp;gt; value
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;删除堆顶&#34;&gt;删除堆顶&lt;/h2&gt;
&lt;p&gt;删除实际上是将堆顶元素移入数组末尾，并不是真的删除。删除节点时，进行下列操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;保存数组末尾元素(存如临时变量&lt;code&gt;v&lt;/code&gt;)，将堆顶元素存入数组末尾&lt;/li&gt;
&lt;li&gt;将原来堆顶元素的两个子节点中较大的一个移入堆顶(以最大堆为例)，填补空缺，此时产生新的空缺，继续此步骤，直到空缺为一个叶子节点&lt;/li&gt;
&lt;li&gt;将&lt;code&gt;v&lt;/code&gt;中存储的值移到空缺叶子节点的位置&lt;/li&gt;
&lt;li&gt;对上一步中的新叶子节点完成向上比较交换操作&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/********************************************
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 删除堆顶元素
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; ********************************************/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_pop_heap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//右孩子
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;child&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;_push_heap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;建堆&#34;&gt;建堆&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;堆的大小固定(且所有元素已知)&lt;/strong&gt;：按“序号从大到小”的顺序遍历所有非叶子节点，将这些节点与左右子节点较大者(以最大堆为例)交换，执行siftdown一直到叶子节点，因此，每遍历到一个节点时，其左子树和右子树都已经是最大堆，只需对当前节点执行siftdown操作&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;堆的大小未知(如数据流)&lt;/strong&gt;：可以通过插入操作来构建堆&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/********************************************
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 建堆
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *  sz：删除堆顶元素后的大小
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *  v： 被堆顶元素占据的位置原来的元素的值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; ********************************************/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_make_heap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//右孩子
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;child&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;_push_heap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;29&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;复杂度&#34;&gt;复杂度&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;插入节点&lt;/strong&gt;：时间复杂度为O(logn)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;删除堆顶&lt;/strong&gt;：时间复杂度为O(logn)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;建堆&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;堆的大小固定(且所有元素已知)&lt;/strong&gt;：每个siftdown操作的最大代价是节点被向下移动到树底的层数。在任意一棵完全二叉树中，大约有一半的节点是叶节点，因此不需要向下移动。四分之一的节点在叶节点的上一层，这样的节点最多只需要移动一层。每向上一层，节点的数目就为前一层的一般，而子树高度加1，因此移动层数加一。&lt;strong&gt;时间复杂度为O(n)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;堆的大小未知(如数据流)&lt;/strong&gt;：由于插入节点的时间代价为O(logn)，对于n个元素，每个执行一次插入操作，所以&lt;strong&gt;时间复杂度为O(nlogn)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
          
          
        
      </description>
    </item>
    
    <item>
      <title>二叉树</title>
      <link>https://gb.yeadoc.com/2026/05/24/%E4%BA%8C%E5%8F%89%E6%A0%91/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://gb.yeadoc.com/2026/05/24/%E4%BA%8C%E5%8F%89%E6%A0%91/</guid>
      <description>
        
          
            &lt;!-- GFM-TOC --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E4%BA%8C%E5%8F%89%E6%A0%91/#两种特殊二叉树&#34;&gt;两种特殊二叉树&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E4%BA%8C%E5%8F%89%E6%A0%91/#二叉树定理&#34;&gt;二叉树定理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E4%BA%8C%E5%8F%89%E6%A0%91/#前中后序遍历&#34;&gt;前中后序遍历&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E4%BA%8C%E5%8F%89%E6%A0%91/#递归版&#34;&gt;递归版&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E4%BA%8C%E5%8F%89%E6%A0%91/#迭代版&#34;&gt;迭代版&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- GFM-TOC --&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h1 id=&#34;两种特殊二叉树&#34;&gt;两种特殊二叉树&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;满二叉树&lt;/strong&gt;（下图左）：除叶子节点外的所有分支节点都含有2个非空子节点的二叉树&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;完全二叉树&lt;/strong&gt;（下图右）：除了最后一层，其余层都是“满”的，这样的二叉树是完全二叉树&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure&gt;
  &lt;picture&gt;

    
      
        
        
        
        
        
        
    &lt;img
      loading=&#34;lazy&#34;
      decoding=&#34;async&#34;
      alt=&#34;&#34;
      
        class=&#34;image_figure image_internal image_unprocessed&#34;
        src=&#34;https://gb.yeadoc.com/pic/al-tree-1.png&#34;
      
      
    /&gt;

    &lt;/picture&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h1 id=&#34;二叉树定理&#34;&gt;二叉树定理&lt;/h1&gt;
&lt;h3 id=&#34;1任意二叉树度数为2节点的个数等于叶节点个数减1&#34;&gt;1）任意二叉树度数为2节点的个数等于叶节点个数减1&lt;/h3&gt;
&lt;p&gt;当只有1个节点时，度为0。每派生出1度，就会多出1个节点。派生出的度和派生出的节点数一定相等。那么就得出了总度数和节点总数的关系：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;节点总数 = 总度数 + 1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;设度数为2的节点数为&lt;code&gt;X2&lt;/code&gt;，度数为1的节点数为&lt;code&gt;X1&lt;/code&gt;，度数为0的节点数为&lt;code&gt;X0&lt;/code&gt;。可以得出如下关系式：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;X2 + X1 + X0 = 2X2 + X1 + 1&lt;/code&gt;，推出 &lt;code&gt;X2 = X0 - 1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;因此，&lt;strong&gt;度数为2的节点个数等于叶节点数减1&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;2满二叉树定理非空满二叉树的叶节点数等于其分支节点数加1&#34;&gt;2）满二叉树定理：非空满二叉树的叶节点数等于其分支节点数加1&lt;/h3&gt;
&lt;p&gt;如果已知前一个结论，那么这个定理显然成立。下面分析如果不知道前一个结论，怎么证明&lt;/p&gt;
&lt;p&gt;对于只有1个节点的树，该定理成立。从这开始思考，每产生1个分支节点(度数为2)。叶子节点数也会加1。因为要产生一个分支节点，那么这个新的分支节点必然是原来的叶子节点，而新的分支节点又生成了2个新的叶子节点。因此叶子节点的总数先是减1然后加2，因此总数加1。因此，产生n个分支节点时，也产生了n个叶子节点，由于最初只有1个叶子节点，所以该定理成立&lt;/p&gt;
&lt;h3 id=&#34;3一颗非空二叉树空子树的数目等于其节点数目加1&#34;&gt;3）一颗非空二叉树空子树的数目等于其节点数目加1&lt;/h3&gt;
&lt;p&gt;考虑只有1个根节点的二叉树：它有2个空子树，1个节点，因此结论成立。从这里开始考虑，每产生1个节点。空子树便会先减1然后加2。就和上面结论中每多出1个分支节点，叶子节点的变化一样。因此在原来结论的基础上，由于空子树和节点等量增长。所以结论成立&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h1 id=&#34;前中后序遍历&#34;&gt;前中后序遍历&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;前序&lt;/strong&gt;遍历：根-&amp;gt;左-&amp;gt;右&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中序&lt;/strong&gt;遍历：左-&amp;gt;根-&amp;gt;右&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;后序&lt;/strong&gt;遍历：左-&amp;gt;右-&amp;gt;根&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;假设树节点的定义如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;TreeNode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;TreeNode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;TreeNode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;TreeNode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;递归版&#34;&gt;递归版&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//前序遍历
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;preorderTraversalRecursion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TreeNode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//操作当前节点
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;preorderTraversalRecursion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;preorderTraversalRecursion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//中序遍历
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;inorderTraversalRecursion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TreeNode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inorderTraversalRecursion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//操作当前节点
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;inorderTraversalRecursion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//后序遍历
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;postorderTraversalRecursion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TreeNode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;postorderTraversalRecursion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;postorderTraversalRecursion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//操作当前节点
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;迭代版&#34;&gt;迭代版&lt;/h2&gt;
&lt;p&gt;需要使用一个栈作为辅助空间&lt;/p&gt;
          
          
        
      </description>
    </item>
    
    <item>
      <title>哈希表</title>
      <link>https://gb.yeadoc.com/2026/05/24/%E5%93%88%E5%B8%8C%E8%A1%A8/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://gb.yeadoc.com/2026/05/24/%E5%93%88%E5%B8%8C%E8%A1%A8/</guid>
      <description>
        
          
            &lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%93%88%E5%B8%8C%E8%A1%A8/#槽总数的选择&#34;&gt;槽总数的选择&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%93%88%E5%B8%8C%E8%A1%A8/#关键码范围较小&#34;&gt;关键码范围较小&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%93%88%E5%B8%8C%E8%A1%A8/#关键码范围较大&#34;&gt;关键码范围较大&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%93%88%E5%B8%8C%E8%A1%A8/#简单的哈希函数&#34;&gt;简单的哈希函数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%93%88%E5%B8%8C%E8%A1%A8/#冲突解决策略&#34;&gt;冲突解决策略&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%93%88%E5%B8%8C%E8%A1%A8/#开哈希法&#34;&gt;开哈希法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%93%88%E5%B8%8C%E8%A1%A8/#闭哈希法&#34;&gt;闭哈希法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;哈希&lt;/strong&gt;：把关键码值映射到表中的位置来访问记录的过程&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;哈希函数&lt;/strong&gt;：将关键码值映射到位置的函数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;槽&lt;/strong&gt;：哈希表中的一个位置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;冲突&lt;/strong&gt;：不同的关键码经过哈希函数哈希后，映射到相同槽的情况&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;探查序列&lt;/strong&gt;：冲突解决策略的闭哈希方法中，如果基位置冲突，需要根据探查函数查找下一个空槽，这个过程产生的序列加上基位置组成了某个关键码的探查序列&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;基本聚集&lt;/strong&gt;：在探查函数的设计中，如果不同基位置关键码产生的探查序列发生重合，会导致对剩余空槽的选择概率不均等
。产生的后果是会导致很长的探查序列。这种现象就是基本聚集&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;二次聚集&lt;/strong&gt;：基位置相同的关键码，产生的探查序列一样。如果哈希函数在某个基位置聚集，仍然会保持聚集&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;哈希方法不适用于下列场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不适用于范围检索&lt;/li&gt;
&lt;li&gt;不能找到具有最大或最小关键码值的记录&lt;/li&gt;
&lt;li&gt;不能按关键码值的顺序访问记录&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;哈希方法既适合基于内存的检索，也适合基于磁盘的检索。是组织存储在磁盘上的大型数据库的主要方法之一（另一种是B树）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;槽总数的选择&#34;&gt;槽总数的选择&lt;/h2&gt;
&lt;h3 id=&#34;关键码范围较小&#34;&gt;关键码范围较小&lt;/h3&gt;
&lt;p&gt;由于关键码范围比较小，可以使用一个槽总数大于关键码总数的表。直接使用槽的下标作为关键码值，此时，不需要将关键码值作为记录的一部分进行存储。哈希函数可以直接设计成&lt;code&gt;h(K)=K&lt;/code&gt;，但是这种情况比较少见&lt;/p&gt;
&lt;h3 id=&#34;关键码范围较大&#34;&gt;关键码范围较大&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;如果可能的关键码范围较大，而同一时间段内存储的记录总数较少时。如果槽数的设计和前者匹配通常意味着空间的浪费，而如果和后者匹配又容易导致冲突&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;除此之外，如果对关键码值的分布特性不了解，也会使得哈希函数的设计更为困难。如果了解关键码值的分布特性，应对使用一个依赖于分布的哈希函数，避免把一组相关的关键码值映射到表的同一个槽中（例如，如果对英文单词进行哈希，就不应当对第一个字符的值哈希，因为这样很可能使分布不均）&lt;/p&gt;
&lt;h2 id=&#34;简单的哈希函数&#34;&gt;简单的哈希函数&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;关键码为数值&lt;/strong&gt;的哈希函数的设计：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;取模&lt;/strong&gt;：哈希函数的返回值(槽的位置)只依赖于关键码的最低几位，由于这些位的分布可能很差，结果分布也就可能很差&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;平方取中&lt;/strong&gt;：一个很好的用于数值的哈希函数。对于长度为2^r的表，取出平方后结果的中间r位作为槽的位置。由于关键码值的大多数位或者所有位都对结果有所贡献，所有效果很好&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;关键码为字符串&lt;/strong&gt;的哈希函数的设计：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;所有字母ASCII值求和对M取模&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;冲突解决策略&#34;&gt;冲突解决策略&lt;/h2&gt;
&lt;p&gt;尽管哈希函数的目标是使冲突最少，但实际上冲突是无法避免的。&lt;strong&gt;冲突解决技术可以分为两类&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;开哈希(单链表)法&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;闭哈希(开放地址)法&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;开哈希法&#34;&gt;开哈希法&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;开哈希(单链表)法把冲突记录存储在表外&lt;/strong&gt;，一种简单的形式是把哈希表中的每个槽定义为一个链表的表头，哈希到一个槽的所有记录都放到该槽的链表内，每个链表可以按如下方式组织记录：&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-hash-1.png&#34;/&gt; &lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;按插入次序排序&lt;/strong&gt;：实现简单&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;按关键码值次序排序&lt;/strong&gt;：一旦到达比要检索的关键码大的节点，说明不存在，就可以停止检索&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;按访问频率次序排序&lt;/strong&gt;：访问较高的记录能快速检索到&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;在磁盘中用一种很有效的方式存储一个开哈希表是很困难的，因为一个链表中的多个元素能存储在不同的磁盘块中。这就会导致检索一个关键码值需要多次磁盘访问，从而抵消了哈希方法的好处&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;闭哈希法&#34;&gt;闭哈希法&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;闭哈希(开放地址)法把冲突记录存储在表中另一个槽内&lt;/strong&gt;。每条记录i有一个&lt;strong&gt;基位置&lt;/strong&gt;，即由哈希函数计算出的槽。如果要插入一条记录R，而另一条记录已经占据了R的基位置，那么就把R存储在表中的其他槽内，由冲突解决策略决定应该是哪个槽。自然，检索时也要像插入一样，遵循同样的策略，以便重复进行冲突解决过程，找出在某位置没有找到的记录&lt;/p&gt;
&lt;h4 id=&#34;1桶式哈希&#34;&gt;1）桶式哈希&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;插入&lt;/strong&gt;：将M个槽分成B个桶，每个桶中包含M/B个槽。哈希函数把每条记录分配到某个桶的第一个槽中。如果该槽被占用，就顺序地沿着桶查找，直到找到一个空槽。如果一个桶全部被占满，那么就把这条记录存储在表后具有无限容量的&lt;strong&gt;溢出桶&lt;/strong&gt;中，所有桶共享一个溢出桶&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;检索&lt;/strong&gt;：确定桶，然后在桶中检索记录，如果没找到并且桶内有空槽，则检索结束。否则，检索溢出桶&lt;/li&gt;
&lt;/ul&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-hash-3.png&#34;/&gt; &lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;桶式哈希适用于实现基于磁盘的哈希表，因为可以把桶的大小设置为磁盘块的大小。当检索时，就把整个桶读入内存。处理插入或检索操作只需进行一次磁盘访问，除非桶已经满了。如果桶满，需要从磁盘中检索溢出桶，自然应该使溢出很小，以最小化不必要的磁盘访问&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;2线性探查&#34;&gt;2）线性探查&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;探查序列&lt;/strong&gt;：通过哈希函数计算出关键码的基位置，如果基位置发生冲突，根据&lt;strong&gt;探查函数&lt;/strong&gt;去寻找下一个槽，直到找到一个空槽，这个过程产生的一组槽序列，就是探查序列&lt;/p&gt;
&lt;p&gt;线性探查就是探查函数线性递增的冲突解决策略，如果基位置为30，整个探查序列会是30,31,32,33...&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-hash-2.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;线性探查的问题在于，会产生&lt;strong&gt;基本聚集&lt;/strong&gt;，基本聚集是指不同基位置的关键码产生的探查序列会发生重合，导致对剩余空槽的选择概率不均等
。产生的后果是会导致很长的探查序列&lt;/p&gt;
&lt;p&gt;在上图a）中，如果使用线性探查，基位置为0,1,2的关键码在探查后都会选择序号为2的槽，同样，基位置为7,8,9的关键码在探查后都会选择序号为9的槽，这就使得剩余槽被选择的概率不相等。在图b）中，这个问题会更明显，如果下一个记录插入了序号为9的槽，则序号为2的空槽被插入记录的概率将是6/10&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;系数大于1的线性探查&lt;/strong&gt;(对线性探查函数添加&lt;strong&gt;常数C&lt;/strong&gt;跳过一些槽)，即：&lt;code&gt;(h(K) + iC) mod M&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;比如当C为2时，基位置为1和2产生的探查序列为1,3,5..和2,4,6..这个方法对于不同关键码，将关键码值分成了几个集合，每个集合中的关键码只会探查所有槽中的一个部分。同时，相同集合中的关键码还是可能聚集&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;为了使探查序列走遍表中所有的槽，常数&lt;code&gt;C&lt;/code&gt;必须与&lt;code&gt;M&lt;/code&gt;互质（即&lt;code&gt;C&lt;/code&gt;为质数或&lt;code&gt;M&lt;/code&gt;为质数），如果&lt;code&gt;C&lt;/code&gt;与&lt;code&gt;M&lt;/code&gt;互质，那么任何关键码的探查序列都会走遍所有的槽&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&#34;3解决聚集的方法&#34;&gt;3）解决聚集的方法&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;二次探查&lt;/strong&gt;：探查函数为i的平方，即基位置为30的关键码，产生的探查序列为30,31,34,39..这种方法的缺陷在于并不是哈希表中所有的槽都在探查序列中&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上述方法虽然能解决基本聚集，但是对于基位置相同的关键码，产生的探查序列还是一样。如果哈希函数在某个基位置聚集，那么上面的方法仍然会保持聚集。也就是所谓的&lt;strong&gt;二次聚集&lt;/strong&gt;。解决二次聚集可以使用&lt;strong&gt;双哈希&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;双哈希&lt;/strong&gt;：要使具有相同基位置的关键码产生不同的探查序列，那么探查函数也应该是基于关键码的函数。假设这个函数为h2(K)，一种方式是根据这个函数产生线性探查序列，即i*h2(K)。例如，如果h2(K)=2，那么基位置为30的关键码产生的探查序列是：30，32，34...，由于h2是基于关键码值的函数，所以基位置相同的不同关键码会产生不同的探查序列，因此可以解决二次聚集&lt;/li&gt;
&lt;/ul&gt;
          
          
        
      </description>
    </item>
    
    <item>
      <title>排序</title>
      <link>https://gb.yeadoc.com/2026/05/24/%E6%8E%92%E5%BA%8F/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://gb.yeadoc.com/2026/05/24/%E6%8E%92%E5%BA%8F/</guid>
      <description>
        
          
            &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;内排序&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E6%8E%92%E5%BA%8F/#1插入排序&#34;&gt;1.插入排序&lt;/a&gt;（稳定）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E6%8E%92%E5%BA%8F/#2冒泡排序&#34;&gt;2.冒泡排序&lt;/a&gt;（稳定）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E6%8E%92%E5%BA%8F/#3选择排序&#34;&gt;3.选择排序&lt;/a&gt;（不稳定）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E6%8E%92%E5%BA%8F/#4shell排序&#34;&gt;4.shell排序&lt;/a&gt;（不稳定）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E6%8E%92%E5%BA%8F/#5快速排序&#34;&gt;5.快速排序&lt;/a&gt;（不稳定）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E6%8E%92%E5%BA%8F/#6归并排序&#34;&gt;6.归并排序&lt;/a&gt;（稳定）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E6%8E%92%E5%BA%8F/#7堆排序&#34;&gt;7.堆排序&lt;/a&gt;（不稳定）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;外排序&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E6%8E%92%E5%BA%8F/#1多路归并&#34;&gt;1.多路归并&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;稳定性：相同的元素在排序前和排序后的前后位置是否发生改变，没有改变则排序是稳定的，改变则排序是不稳定的 &lt;a href=&#34;https://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html&#34;&gt;——八大排序算法的稳定性&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h2 id=&#34;1插入排序&#34;&gt;1.插入排序&lt;/h2&gt;
&lt;p&gt;逐个处理待排序的记录，每个记录与前面已排序已排序的子序列进行比较，将它插入子序列中正确位置&lt;/p&gt;
&lt;h3 id=&#34;代码&#34;&gt;代码&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Elem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inssort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Elem&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[],&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;swap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;性能&#34;&gt;性能&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;最佳：升序。时间复杂度为O(n)&lt;/li&gt;
&lt;li&gt;最差：降序。时间复杂度为O(n^2)&lt;/li&gt;
&lt;li&gt;平均：对于每个元素，前面有一半元素比它大。时间复杂度为O(n^2)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;如果待排序数据已经“基本有序”，使用插入排序可以获得接近O(n)的性能&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;优化&#34;&gt;优化&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Elem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inssort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Elem&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[],&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;
&lt;h2 id=&#34;2冒泡排序&#34;&gt;2.冒泡排序&lt;/h2&gt;
&lt;p&gt;从数组的底部比较到顶部，比较相邻元素。如果下面的元素更小则交换，否则，上面的元素继续往上比较。这个过程每次使最小元素像个“气泡”似地被推到数组的顶部&lt;/p&gt;
&lt;h3 id=&#34;代码-1&#34;&gt;代码&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Elem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bubsort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Elem&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[],&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;swap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;性能-1&#34;&gt;性能&lt;/h3&gt;
&lt;p&gt;冒泡排序是一种相对较慢的排序，没有较好的最佳情况执行时间。通常情况下时间复杂度都是O(n^2)&lt;/p&gt;
&lt;h3 id=&#34;优化-1&#34;&gt;优化&lt;/h3&gt;
&lt;p&gt;增加一个变量flag，用于记录一次循环是否发生了交换，如果没发生交换说明已经有序，可以提前结束&lt;/p&gt;
&lt;br&gt;
&lt;h2 id=&#34;3选择排序&#34;&gt;3.选择排序&lt;/h2&gt;
&lt;p&gt;第i次“选择”数组中第i小的记录，并将该记录放到数组的第i个位置。换句话说，每次从未排序的序列中找到最小元素，放到未排序数组的最前面&lt;/p&gt;
&lt;h3 id=&#34;代码-2&#34;&gt;代码&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Elem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;selsort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Elem&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[],&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lowindex&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lowindex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;lowindex&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;swap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lowindex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//n次交换
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;性能-2&#34;&gt;性能&lt;/h3&gt;
&lt;p&gt;不管数组是否有序，在从未排序的序列中查找最小元素时，都需要遍历完最小序列，所以时间复杂度为O(n^2)&lt;/p&gt;
          
          
        
      </description>
    </item>
    
    <item>
      <title>平衡查找树</title>
      <link>https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/</guid>
      <description>
        
          
            &lt;blockquote&gt;
&lt;p&gt;总结自《算法》(第4版)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- GFM-TOC --&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#平衡查找树&#34;&gt;平衡查找树&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#2-3查找树&#34;&gt;2-3查找树&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#1-查找&#34;&gt;1. 查找&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#2-插入&#34;&gt;2. 插入&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#3-2-3树构造实例&#34;&gt;3. 2-3树构造实例&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#红黑树&#34;&gt;红黑树&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#1-保存颜色信息&#34;&gt;1. 保存颜色信息&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#2-旋转操作&#34;&gt;2. 旋转操作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#3-插入&#34;&gt;3. 插入&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#4-颜色变换&#34;&gt;4. 颜色变换&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#5-旋转与颜色变换过程总结&#34;&gt;5. 旋转与颜色变换过程总结&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#6-红黑树的性质&#34;&gt;6. 红黑树的性质&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#b树与b树&#34;&gt;B树与B+树&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#b树简介&#34;&gt;B树简介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#b树中检索关键码&#34;&gt;B树中检索关键码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#b树中插入关键码&#34;&gt;B树中插入关键码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#b树简介&#34;&gt;B+树简介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#b树中检索关键码&#34;&gt;B+树中检索关键码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#b树中插入关键码&#34;&gt;B+树中插入关键码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%B9%B3%E8%A1%A1%E6%9F%A5%E6%89%BE%E6%A0%91/#b树中删除关键码&#34;&gt;B+树中删除关键码&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- GFM-TOC --&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h1 id=&#34;平衡查找树&#34;&gt;平衡查找树&lt;/h1&gt;
&lt;p&gt;一般的二插查找树如果节点有序插入，树的高度会是n，因此无法实现logn的查找，平衡查找树保证树的高度平衡，因此不管节点插入顺序如何，都可以满足logn的查找&lt;/p&gt;
&lt;h2 id=&#34;2-3查找树&#34;&gt;2-3查找树&lt;/h2&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-tree-3.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;一棵2-3查找树或为一棵空树，或由以下节点组成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;2-节点&lt;/strong&gt;：含有1个键（及其对应的值）和2条链接，左链接指向的2-3树中的键都小于该节点，右链接指向的2-3树中的键都大于该节点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3-节点&lt;/strong&gt;：含有2个键（及其对应的值）和3条链接，左链接指向的2-3树中的键都小于该节点，中链接指向的2-3树中的键都位于该节点的两个键之间，右链接指向的2-3树中的键都大于该节点&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;1-查找&#34;&gt;1. 查找&lt;/h3&gt;
&lt;p&gt;先将查找的键与根节点中的键比较。如果和其中任意一个相等，则查找命中；否则根据比较的结果找到指向相应区间的链接，并在其指向的子树中递归地继续查找。如果这是个空链接，查找未命中&lt;/p&gt;
&lt;h3 id=&#34;2-插入&#34;&gt;2. 插入&lt;/h3&gt;
&lt;h4 id=&#34;1向2-节点中插入新键&#34;&gt;1）向2-节点中插入新键&lt;/h4&gt;
&lt;p&gt;如果未命中的查找结束于一个2-节点，只要把这个2-节点替换为一个3-节点，将要插入的键保存在其中即可。由于整棵树的节点并未发生变化，所以这个插入操作并没有引起高度变化，如果原本树是平衡的，那么插入后也能保持平衡&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-tree-4.png&#34;/&gt; &lt;/div&gt;
&lt;h4 id=&#34;2向3-节点中插入新键&#34;&gt;2）向3-节点中插入新键&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;整棵树只包含一个3-节点&lt;/strong&gt;（&lt;strong&gt;情况一&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;整棵树包含多个节点&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;3-节点的父节点为2-节点&lt;/strong&gt;（&lt;strong&gt;情况二&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3-节点的父节点为3-节点&lt;/strong&gt;（&lt;strong&gt;情况三&lt;/strong&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;情况一&lt;/strong&gt;：先临时将新键存入该节点中，使之成为一个4-节点。然后将这个4-节点转换成一棵由3个2-节点组成的2-3树：其中一个节点(根)含有中键，一个节点含有3个键中的最小者(左子节点)，一个节点含有3个键中的最大者(右子节点)。&lt;strong&gt;很容易看出插入后的树依然是平衡的&lt;/strong&gt;&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-tree-5.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;&lt;strong&gt;情况二&lt;/strong&gt;：先构造一个临时的4-节点并将其分解，但此时不会像情况一一样为中键创建一个新节点，而是将其移动至原来的父节点中。可以将这次转换看成将原3-节点的一条链接替换为新父节点中的原中键左右两边的两条链接，并分别指向两个新的2-节点。&lt;strong&gt;插入后树仍是有序的，并且是完美平衡的&lt;/strong&gt;&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-tree-6.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;&lt;strong&gt;情况三&lt;/strong&gt;：和情况二一样，先构造一个临时的4-节点并分解，将它的中键插入到父节点中。但父节点也是一个3-节点，因此再用这个中键构造一个新的临时4-节点，然后在这个节点上进行相同的变换（即分解这个父节点并将它的中键插入到父节点中）。推广到一般情况，这样一直向上不断分解临时的4-节点并将中键插入更高层的父节点，直至遇到一个2-节点并将它替换为一个不需要继续分解的3-节点，或者是到达3-节点的根（这种情况下，按情况一进行处理，将临时的4-节点分解为3个2-节点，使得树高加一，因为变换的是根节点，所以&lt;strong&gt;仍然保持树的完美平衡性&lt;/strong&gt;）&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-tree-7.png&#34;/&gt; &lt;/div&gt;
&lt;h3 id=&#34;3-2-3树构造实例&#34;&gt;3. 2-3树构造实例&lt;/h3&gt;
&lt;p&gt;下面是根据字符序列[S,E,A,R,C,H,X,M,P,L]构造一棵2-3树的过程。左边是乱序插入，右边是顺序插入&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-tree-8.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;可以发现，2-3树在最坏情况下（顺序插入）仍然可以保证平衡&lt;/p&gt;
&lt;p&gt;每个操作中处理每个节点的时间都不会超过一个很小的常数，并且只会访问一条路径上的节点，所以任何查找或插入的成本都肯定不会超过对数级别。含有10亿个节点的一颗2-3树的高度仅在19到30之间，最多只需要访问30个节点就能够在10亿个键中进行查找和插入操作&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-tree-9.png&#34;/&gt; &lt;/div&gt;
&lt;h2 id=&#34;红黑树&#34;&gt;红黑树&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;尽管可以用不同的数据类型表示2-节点和3-节点并写出转换所需的代码，但用这种直白的表示方法实现大多数的操作并不方便，因为&lt;strong&gt;需要处理的情况实在太多&lt;/strong&gt;：需要维护两种不同类型的节点，将被查找的键和节点中的每个键进行比较，将链接和其它信息从一种节点复制到另一种节点，将节点从一种数据类型转换到另一种数据类型，等等。&lt;strong&gt;实现这些不仅需要大量代码，而且它们产生的额外开销可能会使算法比标准的二插查找树更慢&lt;/strong&gt;。平衡二叉树的初衷是为了消除最坏情况，但我们希望这种保障所需的代码能够越少越好，因此有了红黑树&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;红黑树背后的基本思想是：用标准的二插查找树（完全由2-节点构成）和一些额外的信息（替换3-节点）来表示2-3树&lt;/strong&gt;。将红黑树中的链接分为2种类型：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;红链接&lt;/strong&gt;：红链接将两个2-节点连接起来构成一个3-节点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;黑链接&lt;/strong&gt;：2-3树中的普通链接&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;将2-3树中的3-节点表示为由一条&lt;strong&gt;左斜的红链接相连的两个2-节点&lt;/strong&gt;（优点是，无需修改就可以直接使用标准二插查找树的get方法）&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-tree-10.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;&lt;strong&gt;红黑树是满足下列条件的二叉查找树&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;红链接均为左链接&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有任何一个节点同时和两个红链接相连&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;该树是完美”黑色“平衡的，即任意空链接到根节点的路径上的黑链接数量相同&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果将一棵红黑树中的红链接画平，那么所有的空链接到根节点的距离都将是相同的。如果将由红链接相连的节点合并，得到的就是一棵2-3树。相反，如果将一棵2-3树中的3-节点画作由红色左链接相连的两个2-节点，那么不会存在能够和两条红链接相连的节点，且树必然是完美黑色平衡的&lt;/p&gt;
          
          
        
      </description>
    </item>
    
    <item>
      <title>算法题总结</title>
      <link>https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/</guid>
      <description>
        
          
            &lt;blockquote&gt;
&lt;p&gt;题目来源：《剑指offer》、leetcode、lintcode、hihocoder、《王道程序员求职宝典》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;一&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;二&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;三&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;四&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;五&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;六&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;七&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;八&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;九&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;十&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#array&#34;&gt;数组&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#string&#34;&gt;字符串&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#list&#34;&gt;链表&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#tree&#34;&gt;树&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#stackdeque&#34;&gt;栈和队列&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#math&#34;&gt;数学&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#graph&#34;&gt;图&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#design&#34;&gt;设计&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#bigdata&#34;&gt;海量数据&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#cfunction&#34;&gt;C/C++基础&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;array&#34;&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;一.数组&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;二分查找&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode35：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#查找插入位置&#34;&gt;查找插入位置&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题11：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#旋转数组的最小数字&#34;&gt;旋转数组的最小数字&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode33：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#旋转数组中查找数字&#34;&gt;旋转数组中查找数字&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode81：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#旋转数组中查找数字ii&#34;&gt;旋转数组中查找数字II&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题53(题目一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#有序数组中查找数字的范围&#34;&gt;有序数组中查找数字的范围&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题53(题目二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#缺失的数字&#34;&gt;缺失的数字&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题53(题目三)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数组中数值和下标相等的元素&#34;&gt;数组中数值和下标相等的元素&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode162：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#查找数组中任一峰值的下标&#34;&gt;查找数组中任一峰值的下标&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode4：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#两个排序数组的中值&#34;&gt;两个排序数组的中值&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;其它查找&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode41：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#缺失的第一个正数&#34;&gt;缺失的第一个正数&lt;/a&gt;（&lt;code&gt;交换&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode287：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#寻找数组中重复的数&#34;&gt;寻找数组中重复的数&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt; &lt;code&gt;链表&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode268：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#0n中缺失的数字&#34;&gt;0~n中缺失的数字&lt;/a&gt;（&lt;code&gt;位运算&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode136：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#只出现1次的数字&#34;&gt;只出现1次的数字&lt;/a&gt;（&lt;code&gt;位运算&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题56(题目一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数组中只出现1次的2个数&#34;&gt;数组中只出现1次的2个数&lt;/a&gt;（&lt;code&gt;位运算&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题56(题目二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数组中唯一只出现1次的数字&#34;&gt;数组中唯一只出现1次的数字&lt;/a&gt;（&lt;code&gt;位运算&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题41：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数据流的中位数&#34;&gt;数据流的中位数&lt;/a&gt;（&lt;code&gt;堆&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题57(题目一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#和为s的两个数字&#34;&gt;和为s的两个数字&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题57(题目二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#和为s的连续正数序列&#34;&gt;和为s的连续正数序列&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode217：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#判断数组是否包含重复元素&#34;&gt;判断数组是否包含重复元素&lt;/a&gt;（&lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode1：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#两数之和&#34;&gt;两数之和&lt;/a&gt;（&lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode15：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#三数之和&#34;&gt;三数之和&lt;/a&gt;（&lt;code&gt;排序&lt;/code&gt; &lt;code&gt;双指针&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode18：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#四数之和&#34;&gt;四数之和&lt;/a&gt;（&lt;code&gt;排序&lt;/code&gt; &lt;code&gt;双指针&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode454：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#四数之和ii&#34;&gt;四数之和II&lt;/a&gt;（&lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题39：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数组中出现次数超过一半的数字&#34;&gt;数组中出现次数超过一半的数字&lt;/a&gt;（&lt;code&gt;partition&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题40：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数组中最小的k个数&#34;&gt;数组中最小的k个数&lt;/a&gt;（&lt;code&gt;partition&lt;/code&gt; &lt;code&gt;海量数据&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode347：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#出现频率最高的k个数字&#34;&gt;出现频率最高的k个数字&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode350：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#两个数组的交集ii&#34;&gt;两个数组的交集II&lt;/a&gt;（&lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;数组操作&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode26：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#删除排序数组中的重复项&#34;&gt;删除排序数组中的重复项&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode27：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#删除数组中值为val的元素&#34;&gt;删除数组中值为val的元素&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode189：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#旋转数组&#34;&gt;旋转数组&lt;/a&gt;（&lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode283：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#将数组中的零移到尾部&#34;&gt;将数组中的零移到尾部&lt;/a&gt;（&lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;子数组与连续子数组&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题42：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#连续子数组的最大和&#34;&gt;连续子数组的最大和&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode152：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#连续子数组的最大积&#34;&gt;连续子数组的最大积&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode128：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#最长连续序列&#34;&gt;最长连续序列&lt;/a&gt;（&lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode300：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#最长升序子序列&#34;&gt;最长升序子序列&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode334：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数组的三元升序子序列&#34;&gt;数组的三元升序子序列&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;排列组合&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题38(相关题一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#正方体顶点上放数字&#34;&gt;正方体顶点上放数字&lt;/a&gt;（&lt;code&gt;全排列&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题38(相关题二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#八皇后&#34;&gt;八皇后&lt;/a&gt;（&lt;code&gt;全排列&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode52：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#n皇后ii&#34;&gt;N皇后II&lt;/a&gt;（&lt;code&gt;全排列&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode51：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#n皇后&#34;&gt;N皇后&lt;/a&gt;（&lt;code&gt;全排列&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode31：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#下一个排列&#34;&gt;下一个排列&lt;/a&gt;（&lt;code&gt;排列&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode60：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#第k个排列&#34;&gt;第K个排列&lt;/a&gt;（&lt;code&gt;排列&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode46：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#不含重复元素数组的全排列&#34;&gt;不含重复元素数组的全排列&lt;/a&gt;（&lt;code&gt;全排列&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode47：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#含重复元素数组的全排列&#34;&gt;含重复元素数组的全排列&lt;/a&gt;（&lt;code&gt;全排列&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode77：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#1n中所有k个数的组合&#34;&gt;1~n中所有k个数的组合&lt;/a&gt;（&lt;code&gt;组合&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode78：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#不含重复元素集合的所有子集&#34;&gt;不含重复元素集合的所有子集&lt;/a&gt;（&lt;code&gt;组合&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode90：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#含重复元素集合的所有子集&#34;&gt;含重复元素集合的所有子集&lt;/a&gt;（&lt;code&gt;组合&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode39：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#和为target的数字组合&#34;&gt;和为target的数字组合&lt;/a&gt;（&lt;code&gt;组合&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode40：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#和为target的数字组合ii&#34;&gt;和为target的数字组合II&lt;/a&gt;（&lt;code&gt;组合&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;排序&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题21：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#调整数组顺序使奇数位于偶数前面&#34;&gt;调整数组顺序使奇数位于偶数前面&lt;/a&gt;（&lt;code&gt;partition&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题61：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#扑克牌中的顺子&#34;&gt;扑克牌中的顺子&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode75：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#颜色分类&#34;&gt;颜色分类&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode179：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#将一组数拼接成最大数字&#34;&gt;将一组数拼接成最大数字&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode88：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#合并两个有序数组&#34;&gt;合并两个有序数组&lt;/a&gt;（&lt;code&gt;归并&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题51：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数组中的逆序对&#34;&gt;数组中的逆序对&lt;/a&gt;（&lt;code&gt;归并&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode315：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#计算右侧小于当前元素的个数&#34;&gt;计算右侧小于当前元素的个数&lt;/a&gt;（&lt;code&gt;归并&lt;/code&gt; &lt;code&gt;BST&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode324：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#摆动排序&#34;&gt;摆动排序&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode384：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#打乱数组&#34;&gt;打乱数组&lt;/a&gt;（&lt;code&gt;Fisher–Yates shuffle洗牌算法&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;场景&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode134：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#加油站&#34;&gt;加油站&lt;/a&gt;（&lt;code&gt;贪心&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode121：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#买卖股票的最佳时机&#34;&gt;买卖股票的最佳时机&lt;/a&gt;（&lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode122：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#买卖股票的最佳时机ii&#34;&gt;买卖股票的最佳时机II&lt;/a&gt;（&lt;code&gt;贪心&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode123：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#买卖股票的最佳时机iii&#34;&gt;买卖股票的最佳时机III&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode188：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#买卖股票的最佳时机iv&#34;&gt;买卖股票的最佳时机IV&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode198：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#打家劫舍&#34;&gt;打家劫舍&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode213：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#打家劫舍ii&#34;&gt;打家劫舍II&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode337：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#打家劫舍iii&#34;&gt;打家劫舍III&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode322：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#找钱&#34;&gt;找钱&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;拼多多内推笔试：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#装载货物的最少货车数量&#34;&gt;装载货物的最少货车数量&lt;/a&gt;（&lt;code&gt;贪心&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;二维数组&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题4：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#二维数组中的查找&#34;&gt;二维数组中的查找&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode378：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#有序矩阵中第k小的元素&#34;&gt;有序矩阵中第K小的元素&lt;/a&gt;（&lt;code&gt;优先队列&lt;/code&gt; &lt;code&gt;二分查找&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题29：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#顺时针打印矩阵&#34;&gt;顺时针打印矩阵&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode48：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#90度旋转图片&#34;&gt;90度旋转图片&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题66：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#构建乘积数组&#34;&gt;构建乘积数组&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode73：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#矩阵置零&#34;&gt;矩阵置零&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode289：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#细胞自动机的下一个状态&#34;&gt;细胞自动机的下一个状态&lt;/a&gt;（&lt;code&gt;位运算&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;string&#34;&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;二.字符串&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;字符串与数字&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题20：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#判断字符串是否表示一个数值&#34;&gt;判断字符串是否表示一个数值&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题67：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#把字符串转换成整数&#34;&gt;把字符串转换成整数&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;字符查找&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题50(题目一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#字符串中第一个只出现一次的字符&#34;&gt;字符串中第一个只出现一次的字符&lt;/a&gt;（&lt;code&gt;哈希表&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题50(题目二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#字符流中第一个只出现一次的字符&#34;&gt;字符流中第一个只出现一次的字符&lt;/a&gt;（&lt;code&gt;哈希表&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;翻转&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题58(题目一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#翻转单词顺序&#34;&gt;翻转单词顺序&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题58(题目二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#左旋转字符串&#34;&gt;左旋转字符串&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode344：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#翻转字符串&#34;&gt;翻转字符串&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;排列组合&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题38：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#字符串的排列&#34;&gt;字符串的排列&lt;/a&gt;（&lt;code&gt;排列&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题38(扩展)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#求字符的所有组合&#34;&gt;求字符的所有组合&lt;/a&gt;（&lt;code&gt;组合&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;删除替换&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题5：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#替换空格&#34;&gt;替换空格&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode71：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#简化路径&#34;&gt;简化路径&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;异位词&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode49：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#字母异位词分组&#34;&gt;字母异位词分组&lt;/a&gt;（&lt;code&gt;排序&lt;/code&gt; &lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode242：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#有效的字母异位词&#34;&gt;有效的字母异位词&lt;/a&gt;（&lt;code&gt;排序&lt;/code&gt; &lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;单词查找&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题12：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#单词搜索&#34;&gt;单词搜索&lt;/a&gt;（&lt;code&gt;DFS&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode212：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#单词搜索ii&#34;&gt;单词搜索II&lt;/a&gt;（&lt;code&gt;Trie&lt;/code&gt; &lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;字符串转换&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode91：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数字字符串解码&#34;&gt;数字字符串解码&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode127：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#单词阶梯&#34;&gt;单词阶梯&lt;/a&gt;（&lt;code&gt;BFS&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Lintcode119：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#单词转换的最少次数&#34;&gt;单词转换的最少次数&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;子串与子序列&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode28：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#子串查找&#34;&gt;子串查找&lt;/a&gt;（&lt;code&gt;KMP&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode3：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#不含重复字符的最长子串&#34;&gt;不含重复字符的最长子串&lt;/a&gt;（&lt;code&gt;滑动窗口&lt;/code&gt; &lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode395：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#至少有k个重复字符的最长子串&#34;&gt;至少有K个重复字符的最长子串&lt;/a&gt;（&lt;code&gt;二分法&lt;/code&gt; &lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode76：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#最小覆盖子串&#34;&gt;最小覆盖子串&lt;/a&gt;（&lt;code&gt;滑动窗口&lt;/code&gt; &lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode30：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#所有单词相连的子串&#34;&gt;所有单词相连的子串&lt;/a&gt;（&lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode5：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#最长回文子串&#34;&gt;最长回文子串&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode125：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#判断字符串是否是回文串&#34;&gt;判断字符串是否是回文串&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;字符串拆分&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode131：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#分割回文串&#34;&gt;分割回文串&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode139：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#单词拆分i&#34;&gt;单词拆分I&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode140：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#单词拆分ii&#34;&gt;单词拆分II&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;字符串匹配&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode10：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#正则表达式匹配&#34;&gt;正则表达式匹配&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode44：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#通配符匹配&#34;&gt;通配符匹配&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;最长公共问题&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Lintcode77：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#两个字符串的最长公共子序列&#34;&gt;两个字符串的最长公共子序列&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Lintcode79：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#两个字符串的最长公共子串&#34;&gt;两个字符串的最长公共子串&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode14：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#多个字符串的最长公共前缀&#34;&gt;多个字符串的最长公共前缀&lt;/a&gt;（&lt;code&gt;扫描&lt;/code&gt; &lt;code&gt;分治&lt;/code&gt; &lt;code&gt;二分查找&lt;/code&gt; &lt;code&gt;Trie&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;list&#34;&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;三.链表&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;遍历&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题6：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#从尾到头打印链表&#34;&gt;从尾到头打印链表&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode234：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#回文链表&#34;&gt;回文链表&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题22：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#链表中倒数第k个节点&#34;&gt;链表中倒数第k个节点&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode19：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#删除链表倒数第n个节点&#34;&gt;删除链表倒数第n个节点&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt; &lt;code&gt;鲁棒性&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题22(相关题)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#链表的中间节点&#34;&gt;链表的中间节点&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode141：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#判断链表是否有环&#34;&gt;判断链表是否有环&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题23：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#链表中环的入口节点&#34;&gt;链表中环的入口节点&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;节点删除&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题18(题目一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#删除链表中的节点&#34;&gt;删除链表中的节点&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode203：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#删除链表中等于给定值的所有节点&#34;&gt;删除链表中等于给定值的所有节点&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode83：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#删除有序链表中的重复节点&#34;&gt;删除有序链表中的重复节点&lt;/a&gt;（&lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题18(题目二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#删除有序链表中的重复节点ii&#34;&gt;删除有序链表中的重复节点II&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题62：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#圆圈中最后剩下的数&#34;&gt;圆圈中最后剩下的数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;腾讯面试题：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#实现双链表节点删除函数&#34;&gt;实现双链表节点删除函数&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;单链表处理&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题24：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#反转链表&#34;&gt;反转链表&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题35：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#复杂链表的复制&#34;&gt;复杂链表的复制&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode61：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#旋转链表&#34;&gt;旋转链表&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode24：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#成对交换链表的节点&#34;&gt;成对交换链表的节点&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode25：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#k个一组翻转链表&#34;&gt;K个一组翻转链表&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode143：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#重排链表&#34;&gt;重排链表&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode148：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#链表节点排序&#34;&gt;链表节点排序&lt;/a&gt;（&lt;code&gt;分治归并&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode328：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#将链表偶数位置的节点移至尾部&#34;&gt;将链表偶数位置的节点移至尾部&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;多链表处理&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode2：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#两数相加&#34;&gt;两数相加&lt;/a&gt;（&lt;code&gt;数学&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题25：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#合并两个有序链表&#34;&gt;合并两个有序链表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode23：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#合并k个有序链表&#34;&gt;合并k个有序链表&lt;/a&gt;（&lt;code&gt;多路归并&lt;/code&gt; &lt;code&gt;堆&lt;/code&gt; &lt;code&gt;分治&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题52：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#两个链表的第一个公共节点&#34;&gt;两个链表的第一个公共节点&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tree&#34;&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;四.树&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;遍历&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题7：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#重建二叉树&#34;&gt;重建二叉树&lt;/a&gt;（&lt;code&gt;前序&lt;/code&gt; &lt;code&gt;中序&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题8：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#中序遍历的下一个节点&#34;&gt;中序遍历的下一个节点&lt;/a&gt;（&lt;code&gt;中序&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题26：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#树的子结构&#34;&gt;树的子结构&lt;/a&gt;（&lt;code&gt;前序&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题37：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#序列化二叉树&#34;&gt;序列化二叉树&lt;/a&gt;（&lt;code&gt;前序&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode94：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#输出二叉树的中序遍历序列&#34;&gt;输出二叉树的中序遍历序列&lt;/a&gt;（&lt;code&gt;中序&lt;/code&gt; &lt;code&gt;递归&lt;/code&gt; &lt;code&gt;迭代&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode98：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#判断一棵二叉树是否是bst&#34;&gt;判断一棵二叉树是否是BST&lt;/a&gt;（&lt;code&gt;BST&lt;/code&gt; &lt;code&gt;中序&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题33：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#bst的后序遍历序列&#34;&gt;BST的后序遍历序列&lt;/a&gt;（&lt;code&gt;BST&lt;/code&gt; &lt;code&gt;后序&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题36：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#bst转双链表&#34;&gt;BST转双链表&lt;/a&gt;（&lt;code&gt;BST&lt;/code&gt; &lt;code&gt;中序&lt;/code&gt; &lt;code&gt;双链表&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode108：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#有序数组转bst&#34;&gt;有序数组转BST&lt;/a&gt;（&lt;code&gt;BST&lt;/code&gt; &lt;code&gt;分治&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode109：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#单链表转bst&#34;&gt;单链表转BST&lt;/a&gt;（&lt;code&gt;BST&lt;/code&gt; &lt;code&gt;中序&lt;/code&gt; &lt;code&gt;单链表&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题54：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#bst第k小的节点&#34;&gt;BST第k小的节点&lt;/a&gt;（&lt;code&gt;BST&lt;/code&gt; &lt;code&gt;中序&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode116：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#填充同一层的兄弟节点&#34;&gt;填充同一层的兄弟节点&lt;/a&gt;（&lt;code&gt;BFS&lt;/code&gt; &lt;code&gt;前序&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题32(题目一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#按层不分行输出二叉树&#34;&gt;按层不分行输出二叉树&lt;/a&gt;（&lt;code&gt;BFS&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题32(题目二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#按层分行输出二叉树&#34;&gt;按层分行输出二叉树&lt;/a&gt;（&lt;code&gt;BFS&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题32(题目三)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#之字形打印二叉树&#34;&gt;之字形打印二叉树&lt;/a&gt;（&lt;code&gt;BFS&lt;/code&gt; &lt;code&gt;栈&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;对称二叉树&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题27：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#二叉树的镜像&#34;&gt;二叉树的镜像&lt;/a&gt;（&lt;code&gt;递归&lt;/code&gt; &lt;code&gt;迭代&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题28：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#对称的二叉树&#34;&gt;对称的二叉树&lt;/a&gt;（&lt;code&gt;递归&lt;/code&gt; &lt;code&gt;迭代&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;路径&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题34：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#二叉树中和为某一值的路径&#34;&gt;二叉树中和为某一值的路径&lt;/a&gt;（&lt;code&gt;回溯&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode124：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#二叉树的最大路径和&#34;&gt;二叉树的最大路径和&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;后序&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode863：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#二叉树中与target距离为k的结点&#34;&gt;二叉树中与target距离为K的结点&lt;/a&gt;（&lt;code&gt;DFS(前序)&lt;/code&gt; &lt;code&gt;BFS&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;深度&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题55(题目一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#二叉树的深度&#34;&gt;二叉树的深度&lt;/a&gt;（&lt;code&gt;递归&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题55(题目二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#平衡二叉树avl&#34;&gt;平衡二叉树AVL&lt;/a&gt;（&lt;code&gt;后序&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;公共祖先&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题68：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#两个节点的最低公共祖先&#34;&gt;两个节点的最低公共祖先&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;stackdeque&#34;&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;五.栈和队列&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;设计&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题9：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#用两个栈实现队列&#34;&gt;用两个栈实现队列&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt; &lt;code&gt;队列&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题9(相关题)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#用两个队列实现栈&#34;&gt;用两个队列实现栈&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt; &lt;code&gt;队列&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题30：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#包含min函数的栈&#34;&gt;包含min函数的栈&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题59(题目二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#包含max函数的队列&#34;&gt;包含max函数的队列&lt;/a&gt;（&lt;code&gt;队列&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;其它&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题31：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#栈的压入弹出序列&#34;&gt;栈的压入弹出序列&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode20：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#有效的括号&#34;&gt;有效的括号&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode32：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#最长有效括号&#34;&gt;最长有效括号&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题59(题目一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#滑动窗口的最大值&#34;&gt;滑动窗口的最大值&lt;/a&gt;（&lt;code&gt;队列&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;math&#34;&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;六.数学&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;斐波那契数列&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题10(题目一)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#斐波那契数列&#34;&gt;斐波那契数列&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题10(题目二)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#跳台阶&#34;&gt;跳台阶&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题10(题目三)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#变态跳台阶&#34;&gt;变态跳台阶&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题10(题目四)：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#矩形覆盖&#34;&gt;矩形覆盖&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;特殊&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题49：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#丑数&#34;&gt;丑数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode36：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#有效数独&#34;&gt;有效数独&lt;/a&gt;（&lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode204：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#计数质数&#34;&gt;计数质数&lt;/a&gt;（&lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode279：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#完美平方数&#34;&gt;完美平方数&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;进制&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题15：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#二进制中1的个数&#34;&gt;二进制中1的个数&lt;/a&gt;（&lt;code&gt;位运算&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode7：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#反转整数&#34;&gt;反转整数&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode43：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#字符串相乘&#34;&gt;字符串相乘&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode66：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数组表示的数字加1&#34;&gt;数组表示的数字加1&lt;/a&gt;（&lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode171：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#excel表列序号&#34;&gt;Excel表列序号（26进制转10进制）&lt;/a&gt;（&lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode190：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#颠倒二进制位&#34;&gt;颠倒二进制位&lt;/a&gt;（&lt;code&gt;位运算&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;倍数约数&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode412：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#fizz-buzz&#34;&gt;Fizz Buzz&lt;/a&gt;（&lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;次方与小数&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题16：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#数值的整数次方&#34;&gt;数值的整数次方&lt;/a&gt;（&lt;code&gt;位运算&lt;/code&gt; &lt;code&gt;鲁棒性&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode69：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#求x的平方根&#34;&gt;求x的平方根&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt; &lt;code&gt;鲁棒性&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode166：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#求分数的值&#34;&gt;求分数的值&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode326：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#3的幂&#34;&gt;3的幂&lt;/a&gt;（&lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;找规律&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题43：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#整数1n中1出现的次数&#34;&gt;整数1~n中1出现的次数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Leetcode38：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#报数&#34;&gt;报数&lt;/a&gt;（&lt;code&gt;字符串&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode172：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#阶乘后的零&#34;&gt;阶乘后的零&lt;/a&gt;（&lt;code&gt;鲁棒性&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;条件限制&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题64：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#求1n的和&#34;&gt;求1~n的和&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《剑指offer》面试题65：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#不用加减乘除做加法&#34;&gt;不用加减乘除做加法&lt;/a&gt;（&lt;code&gt;位运算&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode29：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#不用乘除取模实现整数除法&#34;&gt;不用乘除取模实现整数除法&lt;/a&gt;（&lt;code&gt;位运算&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;表达式求值&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode150：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#逆波兰表达式求值&#34;&gt;逆波兰表达式求值&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode227：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#基础的计算器&#34;&gt;基础的计算器&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;几何&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode11：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#盛最多水的容器&#34;&gt;盛最多水的容器&lt;/a&gt;（&lt;code&gt;双指针&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode42：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#接雨水&#34;&gt;接雨水&lt;/a&gt;（&lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode55：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#合并区间&#34;&gt;合并区间&lt;/a&gt;（&lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode84：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#柱状图中最大的矩形&#34;&gt;柱状图中最大的矩形&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode149：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#直线上最多的点数&#34;&gt;直线上最多的点数&lt;/a&gt;（&lt;code&gt;哈希&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode218：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#天际线问题&#34;&gt;天际线问题&lt;/a&gt;（&lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;graph&#34;&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;七.图&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;遍历&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《剑指offer》面试题13：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#机器人的运动范围&#34;&gt;机器人的运动范围&lt;/a&gt;（&lt;code&gt;DFS&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode62：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#左上角到右下角的路径数&#34;&gt;左上角到右下角的路径数&lt;/a&gt;（&lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode63：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#左上角到右下角的路径数ii&#34;&gt;左上角到右下角的路径数II&lt;/a&gt;（&lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt; ）&lt;/li&gt;
&lt;li&gt;Leetcode64：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#左上角到右下角的最短路径&#34;&gt;左上角到右下角的最短路径&lt;/a&gt;（&lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt; ）&lt;/li&gt;
&lt;li&gt;Leetcode130：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#被包围的区域&#34;&gt;被包围的区域&lt;/a&gt;（&lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode200：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#岛屿的数量&#34;&gt;岛屿的数量&lt;/a&gt;（&lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode695：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#岛屿的最大面积&#34;&gt;岛屿的最大面积&lt;/a&gt;（&lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;easy&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode329：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#矩阵中的最长递增路径&#34;&gt;矩阵中的最长递增路径&lt;/a&gt;（&lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode55：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#跳步游戏&#34;&gt;跳步游戏&lt;/a&gt;（&lt;code&gt;贪心&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode45：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#跳步游戏ii&#34;&gt;跳步游戏II&lt;/a&gt;（&lt;code&gt;动态规划&lt;/code&gt; &lt;code&gt;BFS&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;拓扑排序&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode207：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#课程安排&#34;&gt;课程安排&lt;/a&gt;（&lt;code&gt;BFS&lt;/code&gt; &lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode210：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#课程安排ii&#34;&gt;课程安排II&lt;/a&gt;（&lt;code&gt;BFS&lt;/code&gt; &lt;code&gt;DFS&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;最短路径&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;hihoCoder1081：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#dijkstra算法&#34;&gt;Dijkstra算法&lt;/a&gt;（&lt;code&gt;dijkstra&lt;/code&gt; &lt;code&gt;Lv.2&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;最小生成树&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;hihoCoder1097：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#连通所有城市的最短道路&#34;&gt;连通所有城市的最短道路&lt;/a&gt;（&lt;code&gt;prim&lt;/code&gt; &lt;code&gt;Lv.2&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;design&#34;&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;八.设计&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Leetcode146：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#lru缓存机制&#34;&gt;LRU缓存机制&lt;/a&gt;（&lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;链表&lt;/code&gt; &lt;code&gt;hard&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode208：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#实现trie树&#34;&gt;实现Trie树(前缀树)&lt;/a&gt;（&lt;code&gt;Trie&lt;/code&gt; &lt;code&gt;设计&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode341：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#扁平化嵌套列表迭代器&#34;&gt;扁平化嵌套列表迭代器&lt;/a&gt;（&lt;code&gt;栈&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;Leetcode380：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#实现o1的插入删除与随机获取&#34;&gt;实现O(1)的插入删除与随机获取&lt;/a&gt;（&lt;code&gt;哈希表&lt;/code&gt; &lt;code&gt;medium&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;bigdata&#34;&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;九.海量数据&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;公共部分&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《王道程序员求职宝典》：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#两个文件共同的url&#34;&gt;两个文件共同的url&lt;/a&gt;（&lt;code&gt;hash&lt;/code&gt; &lt;code&gt;分治&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;频率最高&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《王道程序员求职宝典》：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#按频率排序多个文件中的query记录&#34;&gt;按频率排序多个文件中的query记录&lt;/a&gt;（&lt;code&gt;hash&lt;/code&gt; &lt;code&gt;分治&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《王道程序员求职宝典》：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#找出文件中频率最高的100个词&#34;&gt;找出文件中频率最高的100个词&lt;/a&gt;（&lt;code&gt;Top K&lt;/code&gt; &lt;code&gt;hash&lt;/code&gt; &lt;code&gt;分治&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《王道程序员求职宝典》：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#海量日志中提取访问百度次数最多的ip&#34;&gt;海量日志中提取访问百度次数最多的IP&lt;/a&gt;（&lt;code&gt;Top K&lt;/code&gt; &lt;code&gt;hash&lt;/code&gt; &lt;code&gt;分治&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;中位数&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;BAT面试经典题：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#100亿个整数的中位数&#34;&gt;100亿个整数的中位数&lt;/a&gt;（&lt;code&gt;二分查找&lt;/code&gt; &lt;code&gt;分桶&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;位图&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《王道程序员求职宝典》：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#实现位图&#34;&gt;实现位图&lt;/a&gt;（&lt;code&gt;位图&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《王道程序员求职宝典》：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#统计不同号码的个数&#34;&gt;统计不同号码的个数&lt;/a&gt;（&lt;code&gt;位图&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《王道程序员求职宝典》：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#查找某个数是否在40亿个数当中&#34;&gt;查找某个数是否在40亿个数当中&lt;/a&gt;（&lt;code&gt;位图&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;《王道程序员求职宝典》：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#25亿整数中只出现一次的整数&#34;&gt;2.5亿整数中只出现一次的整数&lt;/a&gt;（&lt;code&gt;位图&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;其它&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;《王道程序员求职宝典》：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#布隆过滤器&#34;&gt;布隆过滤器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《王道程序员求职宝典》：&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#倒排索引法&#34;&gt;倒排索引法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cfunction&#34;&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;十.C/C++基础&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;C库函数&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#1实现strlen&#34;&gt;实现strlen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#2实现strcmp&#34;&gt;实现strcmp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#3实现strcat&#34;&gt;实现strcat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#4实现strcpy&#34;&gt;实现strcpy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#子串查找&#34;&gt;实现strstr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#1实现memcpy&#34;&gt;实现memcpy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;结构体与联合&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#1实现一个函数确定主机字节序&#34;&gt;实现一个函数确定主机字节序&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#2实现计算结构体成员偏移量的宏&#34;&gt;实现计算结构体成员偏移量的宏&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;动态内存管理&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E7%AE%97%E6%B3%95%E9%A2%98%E6%80%BB%E7%BB%93/#手写实现智能指针&#34;&gt;手写实现智能指针&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h2 id=&#34;数组中重复的数字&#34;&gt;数组中重复的数字&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nowcoder.com/practice/623a5ac0ea5b4e5f95552655361ae0a8?tpId=13&amp;tqId=11203&amp;tPage=3&amp;rp=2&amp;ru=%2Fta%2Fcoding-interviews&amp;qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&#34;&gt;OJ链接&lt;/a&gt;&lt;/p&gt;
          
          
        
      </description>
    </item>
    
    <item>
      <title>图</title>
      <link>https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/</guid>
      <description>
        
          
            &lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/#图的表示&#34;&gt;图的表示&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/#1邻接矩阵&#34;&gt;1.邻接矩阵&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/#2邻接表&#34;&gt;2.邻接表&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/#图的遍历&#34;&gt;图的遍历&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/#dfs深度优先遍历&#34;&gt;DFS(深度优先遍历)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/#bfs广度优先遍历&#34;&gt;BFS(广度优先遍历)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/#拓扑排序&#34;&gt;拓扑排序&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/#最小生成树&#34;&gt;最小生成树&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gb.yeadoc.com/2026/05/24/%E5%9B%BE/#Prim算法&#34;&gt;Prim算法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;图可以用G=(V,E)来表示，每个图都包括一个顶点集合V和一个边集合E，顶点总数记为|V|，边总数记为|E|&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;稀疏图&lt;/strong&gt;：边数较少的图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;密集图&lt;/strong&gt;：边数较多的图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;完全图&lt;/strong&gt;：包含所有可能边的图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;带权图&lt;/strong&gt;：边上标有权的图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;邻接点&lt;/strong&gt;：一条边所连的两个顶点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简单路径&lt;/strong&gt;：路径上不包含重复顶点的图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回路&lt;/strong&gt;：将某个顶点连接到本身，且长度大于等于3的路径&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;无环图&lt;/strong&gt;：不带回路的图&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;图的表示&#34;&gt;图的表示&lt;/h2&gt;
&lt;p&gt;图有两种常用的表示方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;邻接矩阵&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;邻接表&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;1邻接矩阵&#34;&gt;1.邻接矩阵&lt;/h3&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-1.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;使用一个二维矩阵来表示图:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(i,j)=1，表示顶点i到顶点j之间有一条边（&lt;strong&gt;非带权图&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;(i,j)=n，表示顶点i到顶点j之间有一条权重为n的边（&lt;strong&gt;带权图&lt;/strong&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-2.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;&lt;strong&gt;使用邻接矩阵的空间代价总是O(|V|^2)&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;2邻接表&#34;&gt;2.邻接表&lt;/h3&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-1.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;邻接表使用一个顶点指针数组来表示：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数组的元素i表示顶点i的指针，它是一个链表的头结点&lt;/li&gt;
&lt;li&gt;链表其余的顶点表示与顶点i之间存在边的顶点&lt;/li&gt;
&lt;/ul&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-3.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;&lt;strong&gt;邻接表的空间代价与图中边的数目和顶点的数目均有关系。每个顶点要占据一个数组元素的位置，且每条边必须出现在其中某个顶点的边链表中&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;图的遍历&#34;&gt;图的遍历&lt;/h2&gt;
&lt;h3 id=&#34;dfs深度优先遍历&#34;&gt;DFS(深度优先遍历)&lt;/h3&gt;
&lt;p&gt;DFS会递归地访问它的所有未被访问的相邻顶点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先访问顶点v，把所有与v相关联的边存入栈中；&lt;/li&gt;
&lt;li&gt;弹出栈顶元素，栈顶元素代表的边所关联的另一个顶点就是要访问的下一个元素k；&lt;/li&gt;
&lt;li&gt;对k重复对v的操作；&lt;/li&gt;
&lt;li&gt;重复，直至栈中所有元素都被处理完毕&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DFS的执行过程将产生一棵&lt;strong&gt;DFS(深度优先搜索)树&lt;/strong&gt;：&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-4.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;整个DFS的过程如下：&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-5.png&#34;/&gt; &lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;相关题目：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://leetcode.com/problems/max-area-of-island/description/&#34;&gt;Leetcode：695.Max Area of Island&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;bfs广度优先遍历&#34;&gt;BFS(广度优先遍历)&lt;/h3&gt;
&lt;p&gt;使用一个队列。对于每个顶点，在访问其它顶点前，检查当前节点所有邻接点。和树的广度优先遍历类似&lt;/p&gt;
&lt;p&gt;BFS执行过程将产生一棵&lt;strong&gt;BFS(广度优先搜索)树&lt;/strong&gt;：&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-6.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;整个BFS的过程如下：&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-7.png&#34;/&gt; &lt;/div&gt;
&lt;h3 id=&#34;拓扑排序&#34;&gt;拓扑排序&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;(DAG)有向无环图&lt;/strong&gt;可以描述这样一种场景：有一组任务，任务的执行顺序之间具有依赖性，一些任务必须在另一些任务完成之后才开始执行，如下图：&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-8.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;在这种场景下，任务之间的依赖关系不能出现环，否则任何一个都无法开始执行。&lt;strong&gt;将一个(DAG)有向无环图中所有顶点在不违反先决条件规定的基础上排成线性序列的过程就是拓扑排序&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;有2种方法实现拓扑排序：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;基于DFS的方法(递归)&lt;/strong&gt;：当访问某个顶点时，不对这个顶点进行任何处理。当递归返回到这个顶点时，打印这个顶点。这将产生一个逆序的拓扑排序。对其进行一次反序操作就可以得到一个拓扑排序的序列。序列从哪个顶点开始并不重要，只要所有顶点最终都能被访问到&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;基于BFS的方法(迭代)&lt;/strong&gt;：首先访问所有的边，计算指向每个顶点的边数(即计算每个顶点的先决条件数目)。将所有没有先决条件的顶点放入队列，然后开始处理队列。当从顶点中删除一个顶点时，把它打印出来，同时将其所有相邻顶点的先决条件计数减1。当某个相邻顶点的计数为
0时，就将其放入队列。如果还有顶点未被打印，而队列已经为空，则图中必然包含回路&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;最小生成树&#34;&gt;最小生成树&lt;/h2&gt;
&lt;p&gt;最小生成树(MST)是一个包括图G所有顶点及其部分边的图，包括的边是G的子集，满足下列条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这个子集中所有边的权之和为所有子集中最小的&lt;/li&gt;
&lt;li&gt;子集中的边能保证图是连通的&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面是一个最小生成树的例子：&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-9.png&#34;/&gt; &lt;/div&gt;
&lt;p&gt;如果上图中使用边(D,F)代替(C,F)，可得到另一个最小生成树，即最小生成树可能有多个&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;最小生成树适合解决如下问题：怎样使连接电路板上一系列接头所需焊接的线路最短，或者怎样使得在几个城市之间建立电话网所需的线路最短&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;prim算法&#34;&gt;Prim算法&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;原理&lt;/strong&gt;：从图中任意一个节点N开始，初始化，MST为N。选出与N相关联的边中权最小的一条边，设其连接顶点N与另一个顶点M。把顶点M和边(N,M)加入MST中。接下来，选出与顶点N或顶点M相关联的边中权最小的一条边，设其连接另一个新顶点，将这条边和新顶点添加到MST中。反复进行这样的处理，每一步都选出一条边来扩展MST，这条边是连接当前已在MST中的某个顶点与一个不在MST中的顶点的所有边中代价最小的&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;证明Prim算法能生成MST&lt;/strong&gt;：反证法。设图G=(V,E)不能通过Prim算法生成最小生成树。根据Prim算法中各顶点加入MST的顺序，依次定义图G中各顶点为v0,v1,...,v(n-1)。令ei代表边(vx,vi)，其中x&amp;lt;i且i&amp;gt;=1，令ej为Prim算法添加的序号最小的那条(第一条)出现以下情况的边：加入ej后的边集不能被扩展而构成图G的一个MST。换句话说，ej是Prim算法发生错误的第一条边。设T为“真正的”MST。令vp为边ej所关联的顶点，即ej=（vp,vj）&lt;br&gt;
因为T是一个树结构，所以T中将存在一条连接vp和vj的路径，且此路径中一定存在某条边e&#39;连接vu和vw，其中u&amp;lt;j，w&amp;gt;=j。因为ej不是T的一部分，所以把ej加入到T会构成一个回路。又因为Prim算法不能生成一个MST，所以e&#39;的权比ej的权更小。这种情况如下图。但是，Prim算法应选择可能的最小权边，它一定会选择e&#39;，而不是ej。这与Prim算法选错了边ej的假设相矛盾。因此，Prim算法一定是正确的&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt; &lt;img src=&#34;../pic/al-graph-10.png&#34;/&gt; &lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;相关题目：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://hihocoder.com/problemset/problem/1097&#34;&gt;hihoCoder：1097.最小生成树一·Prim算法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
          
          
        
      </description>
    </item>
    
  </channel>
</rss>
