<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>最长递增子序列 on Jeanphilo Blog</title><link>https://shio-chan-dev.github.io/jeanblog/zh/tags/%E6%9C%80%E9%95%BF%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97/</link><description>Recent content in 最长递增子序列 on Jeanphilo Blog</description><generator>Hugo -- 0.166.0</generator><language>zh-cn</language><lastBuildDate>Tue, 22 Sep 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://shio-chan-dev.github.io/jeanblog/zh/tags/%E6%9C%80%E9%95%BF%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97/index.xml" rel="self" type="application/rss+xml"/><item><title>LeetCode 300：最长递增子序列，从“以 i 结尾”推出序列 DP</title><link>https://shio-chan-dev.github.io/jeanblog/zh/alg/leetcode/hot100/300-longest-increasing-subsequence/</link><pubDate>Tue, 22 Sep 2026 00:00:00 +0800</pubDate><guid>https://shio-chan-dev.github.io/jeanblog/zh/alg/leetcode/hot100/300-longest-increasing-subsequence/</guid><description>&lt;h2 id="题目要求"&gt;题目要求&lt;/h2&gt;
&lt;h3 id="输入输出"&gt;输入输出&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;输入：整数数组 &lt;code&gt;nums&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;输出：返回 &lt;code&gt;nums&lt;/code&gt; 的最长严格递增子序列长度&lt;/li&gt;
&lt;li&gt;子序列保持原数组中的相对顺序，但不要求连续，可以跳过元素&lt;/li&gt;
&lt;li&gt;如果选择的下标是 &lt;code&gt;i_1 &amp;lt; i_2 &amp;lt; ... &amp;lt; i_k&lt;/code&gt;，还必须满足 &lt;code&gt;nums[i_1] &amp;lt; nums[i_2] &amp;lt; ... &amp;lt; nums[i_k]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;子序列非空，因此至少选择一个元素&lt;/li&gt;
&lt;li&gt;约束：&lt;code&gt;1 &amp;lt;= nums.length &amp;lt;= 2500&lt;/code&gt;，&lt;code&gt;-10^4 &amp;lt;= nums[i] &amp;lt;= 10^4&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="示例"&gt;示例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入：nums = [10,9,2,5,3,7,101,18]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出：4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;解释：[2,5,7,101] 是一个长度为 4 的严格递增子序列；它不要求在原数组中连续。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入：nums = [0,1,0,3,2,3]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出：4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;解释：[0,1,2,3] 的长度为 4；`[0,1,3]` 也是合法但更短的选择。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这篇只用 Python，从“每个位置结尾能形成多长”这个局部问题开始，逐步写出可运行解法。&lt;/p&gt;
&lt;h2 id="step-1先问以哪个位置结束"&gt;Step 1：先问“以哪个位置结束？”&lt;/h2&gt;
&lt;p&gt;先看第一个例子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;下标： 0 1 2 3 4 5 6 7
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;数值： 10 9 2 5 3 7 101 18
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;答案 &lt;code&gt;[2,5,7,101]&lt;/code&gt; 跳过了 &lt;code&gt;9&lt;/code&gt; 和 &lt;code&gt;3&lt;/code&gt;。当我们走到值为 &lt;code&gt;7&lt;/code&gt; 的位置时，不能只问“它左边相邻的数是谁”，而要问：&lt;/p&gt;</description></item></channel></rss>