1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-09-04 23:11:41 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
This commit is contained in:
2022-12-04 20:08:50 +08:00
parent 23a743b5be
commit ba2e2740b3
65 changed files with 18894 additions and 12383 deletions

View File

@@ -0,0 +1,51 @@
<p>给你一个正整数&nbsp;<code>n</code>&nbsp;,表示总共有&nbsp;<code>n</code>&nbsp;个城市,城市从&nbsp;<code>1</code>&nbsp;&nbsp;<code>n</code>&nbsp;编号。给你一个二维数组&nbsp;<code>roads</code>&nbsp;,其中&nbsp;<code>roads[i] = [a<sub>i</sub>, b<sub>i</sub>, distance<sub>i</sub>]</code>&nbsp;表示城市&nbsp;<code>a<sub>i</sub></code>&nbsp;<code>b<sub>i</sub></code>&nbsp;之间有一条 <strong>双向</strong>&nbsp;道路,道路距离为&nbsp;<code>distance<sub>i</sub></code>&nbsp;。城市构成的图不一定是连通的。</p>
<p>两个城市之间一条路径的 <strong>分数</strong>&nbsp;定义为这条路径中道路的 <strong>最小</strong>&nbsp;距离。</p>
<p><span class="text-only" data-eleid="20" style="white-space: pre;">城市</span><span class="text-only text-font-italic" data-eleid="21" style="white-space: pre;"> </span><code><span class="text-only" data-eleid="22" style="white-space: pre;">1</span></code><span class="text-only text-font-italic" data-eleid="23" style="white-space: pre;"> </span><span class="text-only" data-eleid="24" style="white-space: pre;">和城市</span><span class="text-only text-font-italic" data-eleid="25" style="white-space: pre;"> </span><span class="text-only" data-eleid="26" style="white-space: pre;"><code>n</code> 之间的所有路径的 </span><strong><span class="text-only" data-eleid="27" style="white-space: pre;">最小</span></strong><span class="text-only" data-eleid="28" style="white-space: pre;"> 分数。</span></p>
<p><b>注意:</b></p>
<ul>
<li>一条路径指的是两个城市之间的道路序列。</li>
<li>一条路径可以 <strong>多次</strong> 包含同一条道路,你也可以沿着路径多次到达城市 <code>1</code>&nbsp;和城市 <code>n</code>&nbsp;</li>
<li>测试数据保证城市 <code>1</code>&nbsp;和城市<code>n</code>&nbsp;之间 <strong>至少</strong>&nbsp;有一条路径。</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/12/graph11.png" style="width: 190px; height: 231px;" /></p>
<pre>
<b>输入:</b>n = 4, roads = [[1,2,9],[2,3,6],[2,4,5],[1,4,7]]
<b>输出:</b>5
<b>解释:</b>城市 1 到城市 4 的路径中分数最小的一条为1 -&gt; 2 -&gt; 4 。这条路径的分数是 min(9,5) = 5 。
不存在分数更小的路径。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/12/graph22.png" style="width: 190px; height: 231px;" /></p>
<pre>
<b>输入:</b>n = 4, roads = [[1,2,2],[1,3,4],[3,4,7]]
<b>输出:</b>2
<b>解释:</b>城市 1 到城市 4 分数最小的路径是1 -&gt; 2 -&gt; 1 -&gt; 3 -&gt; 4 。这条路径的分数是 min(2,2,4,7) = 2 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= roads.length &lt;= 10<sup>5</sup></code></li>
<li><code>roads[i].length == 3</code></li>
<li><code>1 &lt;= a<sub>i</sub>, b<sub>i</sub> &lt;= n</code></li>
<li><code>a<sub>i</sub> != b<sub>i</sub></code></li>
<li><code>1 &lt;= distance<sub>i</sub> &lt;= 10<sup>4</sup></code></li>
<li>不会有重复的边。</li>
<li>城市 <code>1</code>&nbsp;和城市 <code>n</code>&nbsp;之间至少有一条路径。</li>
</ul>

View File

@@ -0,0 +1,37 @@
<p>给你一个链表的头节点 <code>head</code></p>
<p>对于列表中的每个节点 <code>node</code> ,如果其右侧存在一个具有 <strong>严格更大</strong> 值的节点,则移除 <code>node</code></p>
<p>返回修改后链表的头节点<em> </em><code>head</code><em> </em></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/02/drawio.png" style="width: 631px; height: 51px;" /></p>
<pre>
<strong>输入:</strong>head = [5,2,13,3,8]
<strong>输出:</strong>[13,8]
<strong>解释:</strong>需要移除的节点是 5 2 和 3 。
- 节点 13 在节点 5 右侧。
- 节点 13 在节点 2 右侧。
- 节点 8 在节点 3 右侧。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>head = [1,1,1,1]
<strong>输出:</strong>[1,1,1,1]
<strong>解释:</strong>每个节点的值都是 1 ,所以没有需要移除的节点。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li>给定列表中的节点数目在范围 <code>[1, 10<sup>5</sup>]</code></li>
<li><code>1 &lt;= Node.val &lt;= 10<sup>5</sup></code></li>
</ul>

View File

@@ -0,0 +1,46 @@
<p>圆内一个 <strong>有效切割</strong>&nbsp;,符合以下二者之一:</p>
<ul>
<li>该切割是两个端点在圆上的线段,且该线段经过圆心。</li>
<li>该切割是一端在圆心另一端在圆上的线段。</li>
</ul>
<p>一些有效和无效的切割如下图所示。</p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/29/alldrawio.png" style="width: 450px; height: 174px;" /></p>
<p>给你一个整数&nbsp;<code>n</code>&nbsp;,请你返回将圆切割成相等的&nbsp;<code>n</code>&nbsp;等分的&nbsp;<strong>最少</strong>&nbsp;切割次数。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/24/11drawio.png" style="width: 200px; height: 200px;" /></p>
<pre>
<b>输入:</b>n = 4
<b>输出:</b>2
<b>解释:</b>
上图展示了切割圆 2 次,得到四等分。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/24/22drawio.png" style="width: 200px; height: 201px;" /></p>
<pre>
<b>输入:</b>n = 3
<b>输出:</b>3
<strong>解释:</strong>
最少需要切割 3 次,将圆切成三等分。
少于 3 次切割无法将圆切成大小相等面积相同的 3 等分。
同时可以观察到,第一次切割无法将圆切割开。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 100</code></li>
</ul>

View File

@@ -0,0 +1,46 @@
<p>给你一个正整数数组 <code>skill</code> ,数组长度为 <strong>偶数</strong> <code>n</code> ,其中 <code>skill[i]</code> 表示第 <code>i</code> 个玩家的技能点。将所有玩家分成 <code>n / 2</code><code>2</code> 人团队,使每一个团队的技能点之和 <strong>相等</strong></p>
<p>团队的 <strong>化学反应</strong> 等于团队中玩家的技能点 <strong>乘积</strong></p>
<p>返回所有团队的 <strong>化学反应</strong> 之和,如果无法使每个团队的技能点之和相等,则返回 <code>-1</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>skill = [3,2,5,1,3,4]
<strong>输出:</strong>22
<strong>解释:</strong>
将玩家分成 3 个团队 (1, 5), (2, 4), (3, 3) ,每个团队的技能点之和都是 6 。
所有团队的化学反应之和是 1 * 5 + 2 * 4 + 3 * 3 = 5 + 8 + 9 = 22 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>skill = [3,4]
<strong>输出:</strong>12
<strong>解释:</strong>
两个玩家形成一个团队,技能点之和是 7 。
团队的化学反应是 3 * 4 = 12 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>skill = [1,1,2,3]
<strong>输出:</strong>-1
<strong>解释:</strong>
无法将玩家分成每个团队技能点都相等的若干个 2 人团队。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= skill.length &lt;= 10<sup>5</sup></code></li>
<li><code>skill.length</code> 是偶数</li>
<li><code>1 &lt;= skill[i] &lt;= 1000</code></li>
</ul>

View File

@@ -0,0 +1,57 @@
<p>给你一个顾客访问商店的日志,用一个下标从 <strong>0</strong>&nbsp;开始且只包含字符&nbsp;<code>'N'</code>&nbsp;<code>'Y'</code>&nbsp;的字符串&nbsp;<code>customers</code>&nbsp;表示:</p>
<ul>
<li>如果第&nbsp;<code>i</code>&nbsp;个字符是&nbsp;<code>'Y'</code>&nbsp;,它表示第&nbsp;<code>i</code>&nbsp;小时有顾客到达。</li>
<li>如果第&nbsp;<code>i</code>&nbsp;个字符是&nbsp;<code>'N'</code>&nbsp;,它表示第 <code>i</code>&nbsp;小时没有顾客到达。</li>
</ul>
<p>如果商店在第&nbsp;<code>j</code>&nbsp;小时关门(<code>0 &lt;= j &lt;= n</code>),代价按如下方式计算:</p>
<ul>
<li>在开门期间,如果某一个小时没有顾客到达,代价增加 <code>1</code>&nbsp;</li>
<li>在关门期间,如果某一个小时有顾客到达,代价增加&nbsp;<code>1</code>&nbsp;</li>
</ul>
<p>请你返回在确保代价 <strong>最小</strong>&nbsp;的前提下,商店的&nbsp;<strong>最早</strong>&nbsp;关门时间。</p>
<p>注意,商店在第 <code>j</code>&nbsp;小时关门表示在第 <code>j</code> 小时以及之后商店处于关门状态。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>customers = "YYNY"
<b>输出:</b>2
<b>解释:</b>
- 第 0 小时关门,总共 1+1+0+1 = 3 代价。
- 第 1 小时关门,总共 0+1+0+1 = 2 代价。
- 第 2 小时关门,总共 0+0+0+1 = 1 代价。
- 第 3 小时关门,总共 0+0+1+1 = 2 代价。
- 第 4 小时关门,总共 0+0+1+0 = 1 代价。
在第 2 或第 4 小时关门代价都最小。由于第 2 小时更早,所以最优关门时间是 2 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>customers = "NNNNN"
<b>输出:</b>0
<b>解释:</b>最优关门时间是 0 ,因为自始至终没有顾客到达。</pre>
<p><strong>示例 3</strong></p>
<pre>
<b>输入:</b>customers = "YYYY"
<b>输出:</b>4
<b>解释:</b>最优关门时间是 4 ,因为每一小时均有顾客到达。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= customers.length &lt;= 10<sup>5</sup></code></li>
<li><code>customers</code>&nbsp;只包含字符&nbsp;<code>'Y'</code>&nbsp;&nbsp;<code>'N'</code>&nbsp;</li>
</ul>

View File

@@ -0,0 +1,61 @@
<p><strong>句子</strong> 是由单个空格分隔的一组单词,且不含前导或尾随空格。</p>
<ul>
<li>例如,<code>"Hello World"</code><code>"HELLO"</code><code>"hello world hello world"</code> 都是符合要求的句子。</li>
</ul>
<p>单词 <strong></strong> 由大写和小写英文字母组成。且大写和小写字母会视作不同字符。</p>
<p>如果句子满足下述全部条件,则认为它是一个 <strong>回环句</strong> </p>
<ul>
<li>单词的最后一个字符和下一个单词的第一个字符相等。</li>
<li>最后一个单词的最后一个字符和第一个单词的第一个字符相等。</li>
</ul>
<p>例如,<code>"leetcode exercises sound delightful"</code><code>"eetcode"</code><code>"leetcode eats soul"</code> 都是回环句。然而,<code>"Leetcode is cool"</code><code>"happy Leetcode"</code><code>"Leetcode"</code><code>"I like Leetcode"</code><strong></strong> 是回环句。</p>
<p>给你一个字符串 <code>sentence</code> ,请你判断它是不是一个回环句。如果是,返回 <code>true</code><em> </em>;否则,返回 <code>false</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>sentence = "leetcode exercises sound delightful"
<strong>输出:</strong>true
<strong>解释:</strong>句子中的单词是 ["leetcode", "exercises", "sound", "delightful"] 。
- leetcod<strong><em>e</em></strong> 的最后一个字符和 <strong><em>e</em></strong>xercises 的第一个字符相等。
- exercise<em><strong>s</strong></em> 的最后一个字符和 <em><strong>s</strong></em>ound 的第一个字符相等。
- <em><strong>s</strong></em>ound 的最后一个字符和 delightfu<em><strong>l</strong></em> 的第一个字符相等。
- delightfu<em><strong>l</strong></em> 的最后一个字符和 <em><strong>l</strong></em>eetcode 的第一个字符相等。
这个句子是回环句。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>sentence = "eetcode"
<strong>输出:</strong>true
<strong>解释:</strong>句子中的单词是 ["eetcode"] 。
- eetcod<em><strong>e</strong></em> 的最后一个字符和 eetcod<em><strong>e</strong></em> 的第一个字符相等。
这个句子是回环句。</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>sentence = "Leetcode is cool"
<strong>输出:</strong>false
<strong>解释:</strong>句子中的单词是 ["Leetcode", "is", "cool"] 。
- Leetcod<em><strong>e</strong></em>&nbsp;的最后一个字符和 i<strong><em>s</em></strong> 的第一个字符 <strong></strong> 相等。
这个句子 <strong></strong> 是回环句。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= sentence.length &lt;= 500</code></li>
<li><code>sentence</code> 仅由大小写英文字母和空格组成</li>
<li><code>sentence</code> 中的单词由单个空格进行分隔</li>
<li>不含任何前导或尾随空格</li>
</ul>

View File

@@ -0,0 +1,50 @@
<p>给你一个正整数&nbsp;<code>n</code>&nbsp;,表示一个 <strong>无向</strong>&nbsp;图中的节点数目,节点编号从&nbsp;<code>1</code>&nbsp;&nbsp;<code>n</code>&nbsp;</p>
<p>同时给你一个二维整数数组&nbsp;<code>edges</code>&nbsp;,其中&nbsp;<code>edges[i] = [a<sub>i, </sub>b<sub>i</sub>]</code>&nbsp;表示节点&nbsp;<code>a<sub>i</sub></code>&nbsp;<code>b<sub>i</sub></code><sub>&nbsp;</sub>之间有一条&nbsp;<strong>双向</strong>&nbsp;边。注意给定的图可能是不连通的。</p>
<p>请你将图划分为&nbsp;<code>m</code>&nbsp;个组(编号从 <strong>1</strong>&nbsp;开始),满足以下要求:</p>
<ul>
<li>图中每个节点都只属于一个组。</li>
<li>图中每条边连接的两个点&nbsp;<code>[a<sub>i, </sub>b<sub>i</sub>]</code>&nbsp;,如果&nbsp;<code>a<sub>i</sub></code>&nbsp;属于编号为&nbsp;<code>x</code>&nbsp;的组,<code>b<sub>i</sub></code>&nbsp;属于编号为&nbsp;<code>y</code>&nbsp;的组,那么&nbsp;<code>|y - x| = 1</code>&nbsp;</li>
</ul>
<p>请你返回最多可以将节点分为多少个组(也就是最大的<em>&nbsp;</em><code>m</code>&nbsp;)。如果没办法在给定条件下分组,请你返回&nbsp;<code>-1</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/13/example1.png" style="width: 352px; height: 201px;"></p>
<pre><b>输入:</b>n = 6, edges = [[1,2],[1,4],[1,5],[2,6],[2,3],[4,6]]
<b>输出:</b>4
<b>解释:</b>如上图所示,
- 节点 5 在第一个组。
- 节点 1 在第二个组。
- 节点 2 和节点 4 在第三个组。
- 节点 3 和节点 6 在第四个组。
所有边都满足题目要求。
如果我们创建第五个组,将第三个组或者第四个组中任何一个节点放到第五个组,至少有一条边连接的两个节点所属的组编号不符合题目要求。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>n = 3, edges = [[1,2],[2,3],[3,1]]
<b>输出:</b>-1
<b>解释:</b>如果我们将节点 1 放入第一个组,节点 2 放入第二个组,节点 3 放入第三个组,前两条边满足题目要求,但第三条边不满足题目要求。
没有任何符合题目要求的分组方式。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 500</code></li>
<li><code>1 &lt;= edges.length &lt;= 10<sup>4</sup></code></li>
<li><code>edges[i].length == 2</code></li>
<li><code>1 &lt;= a<sub>i</sub>, b<sub>i</sub> &lt;= n</code></li>
<li><code>a<sub>i</sub> != b<sub>i</sub></code></li>
<li>两个点之间至多只有一条边。</li>
</ul>

View File

@@ -0,0 +1,40 @@
<p>给你一个正整数 <code>n</code> ,找出满足下述条件的<strong> 中枢整数</strong> <code>x</code> </p>
<ul>
<li><code>1</code><code>x</code> 之间的所有元素之和等于 <code>x</code><code>n</code> 之间所有元素之和。</li>
</ul>
<p>返回中枢整数<em> </em><code>x</code> 。如果不存在中枢整数,则返回 <code>-1</code> 。题目保证对于给定的输入,至多存在一个中枢整数。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>n = 8
<strong>输出:</strong>6
<strong>解释:</strong>6 是中枢整数,因为 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 1
<strong>输出:</strong>1
<strong>解释:</strong>1 是中枢整数,因为 1 = 1 。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<strong>输入:</strong>n = 4
<strong>输出:</strong>-1
<strong>解释:</strong>可以证明不存在满足题目要求的整数。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 1000</code></li>
</ul>

View File

@@ -0,0 +1,42 @@
<p>给你一个长度为 <code>n</code> 的数组 <code>nums</code> ,该数组由从 <code>1</code><code>n</code><strong>不同</strong> 整数组成。另给你一个正整数 <code>k</code></p>
<p>统计并返回 <code>num</code> 中的 <strong>中位数</strong> 等于 <code>k</code> 的非空子数组的数目。</p>
<p><strong>注意:</strong></p>
<ul>
<li>数组的中位数是按 <strong>递增</strong> 顺序排列后位于 <strong>中间</strong> 的那个元素,如果数组长度为偶数,则中位数是位于中间靠 <strong></strong> 的那个元素。
<ul>
<li>例如,<code>[2,3,1,4]</code> 的中位数是 <code>2</code> <code>[8,4,3,5,1]</code> 的中位数是 <code>4</code></li>
</ul>
</li>
<li>子数组是数组中的一个连续部分。</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>nums = [3,2,1,4,5], k = 4
<strong>输出:</strong>3
<strong>解释:</strong>中位数等于 4 的子数组有:[4]、[4,5] 和 [1,4,5] 。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>nums = [2,3,1], k = 3
<strong>输出:</strong>1
<strong>解释:</strong>[3] 是唯一一个中位数等于 3 的子数组。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == nums.length</code></li>
<li><code>1 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums[i], k &lt;= n</code></li>
<li><code>nums</code> 中的整数互不相同</li>
</ul>

View File

@@ -0,0 +1,42 @@
<p>给你数字字符串&nbsp;<code>s</code>&nbsp;,请你返回&nbsp;<code>s</code>&nbsp;中长度为&nbsp;<code>5</code>&nbsp;<b>回文子序列</b>&nbsp;数目。由于答案可能很大,请你将答案对&nbsp;<code>10<sup>9</sup> + 7</code>&nbsp;<strong>取余</strong>&nbsp;后返回。</p>
<p><strong>提示:</strong></p>
<ul>
<li>如果一个字符串从前往后和从后往前读相同,那么它是 <strong>回文字符串</strong>&nbsp;</li>
<li>子序列是一个字符串中删除若干个字符后,不改变字符顺序,剩余字符构成的字符串。</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>s = "103301"
<b>输出:</b>2
<b>解释:</b>
总共有 6 长度为 5 的子序列:"10330" "10331" "10301" "10301" "13301" "03301" 。
它们中有两个(都是 "10301")是回文的。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>s = "0000000"
<b>输出:</b>21
<b>解释:</b>所有 21 个长度为 5 的子序列都是 "00000" ,都是回文的。
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>s = "9999900000"
<b>输出:</b>2
<b>解释:</b>仅有的两个回文子序列是 "99999" 和 "00000" 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 10<sup>4</sup></code></li>
<li><code>s</code>&nbsp;只包含数字字符。</li>
</ul>

View File

@@ -0,0 +1,60 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的&nbsp;<code>m x n</code>&nbsp;二进制矩阵&nbsp;<code>grid</code>&nbsp;</p>
<p>我们按照如下过程,定义一个下标从 <strong>0</strong>&nbsp;开始的&nbsp;<code>m x n</code>&nbsp;差值矩阵&nbsp;<code>diff</code>&nbsp;</p>
<ul>
<li>令第&nbsp;<code>i</code>&nbsp;行一的数目为&nbsp;<code>onesRow<sub>i</sub></code>&nbsp;</li>
<li>令第&nbsp;<code>j</code>&nbsp;列一的数目为&nbsp;<code>onesCol<sub>j</sub></code><sub>&nbsp;</sub></li>
<li>令第&nbsp;<code>i</code>&nbsp;行零的数目为&nbsp;<code>zerosRow<sub>i</sub></code>&nbsp;</li>
<li>令第&nbsp;<code>j</code>&nbsp;列零的数目为&nbsp;<code>zerosCol<sub>j</sub></code>&nbsp;</li>
<li><code>diff[i][j] = onesRow<sub>i</sub> + onesCol<sub>j</sub> - zerosRow<sub>i</sub> - zerosCol<sub>j</sub></code></li>
</ul>
<p>请你返回差值矩阵<em>&nbsp;</em><code>diff</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img src="https://assets.leetcode.com/uploads/2022/11/06/image-20221106171729-5.png" style="width: 400px; height: 208px;"></p>
<pre><b>输入:</b>grid = [[0,1,1],[1,0,1],[0,0,1]]
<b>输出:</b>[[0,0,4],[0,0,4],[-2,-2,2]]
<b>解释:</b>
- diff[0][0] = <code>onesRow<sub>0</sub> + onesCol<sub>0</sub> - zerosRow<sub>0</sub> - zerosCol<sub>0</sub></code> = 2 + 1 - 1 - 2 = 0
- diff[0][1] = <code>onesRow<sub>0</sub> + onesCol<sub>1</sub> - zerosRow<sub>0</sub> - zerosCol<sub>1</sub></code> = 2 + 1 - 1 - 2 = 0
- diff[0][2] = <code>onesRow<sub>0</sub> + onesCol<sub>2</sub> - zerosRow<sub>0</sub> - zerosCol<sub>2</sub></code> = 2 + 3 - 1 - 0 = 4
- diff[1][0] = <code>onesRow<sub>1</sub> + onesCol<sub>0</sub> - zerosRow<sub>1</sub> - zerosCol<sub>0</sub></code> = 2 + 1 - 1 - 2 = 0
- diff[1][1] = <code>onesRow<sub>1</sub> + onesCol<sub>1</sub> - zerosRow<sub>1</sub> - zerosCol<sub>1</sub></code> = 2 + 1 - 1 - 2 = 0
- diff[1][2] = <code>onesRow<sub>1</sub> + onesCol<sub>2</sub> - zerosRow<sub>1</sub> - zerosCol<sub>2</sub></code> = 2 + 3 - 1 - 0 = 4
- diff[2][0] = <code>onesRow<sub>2</sub> + onesCol<sub>0</sub> - zerosRow<sub>2</sub> - zerosCol<sub>0</sub></code> = 1 + 1 - 2 - 2 = -2
- diff[2][1] = <code>onesRow<sub>2</sub> + onesCol<sub>1</sub> - zerosRow<sub>2</sub> - zerosCol<sub>1</sub></code> = 1 + 1 - 2 - 2 = -2
- diff[2][2] = <code>onesRow<sub>2</sub> + onesCol<sub>2</sub> - zerosRow<sub>2</sub> - zerosCol<sub>2</sub></code> = 1 + 3 - 2 - 0 = 2
</pre>
<p><strong>示例 2</strong></p>
<p><img src="https://assets.leetcode.com/uploads/2022/11/06/image-20221106171747-6.png" style="width: 358px; height: 150px;"></p>
<pre><b>输入:</b>grid = [[1,1,1],[1,1,1]]
<b>输出:</b>[[5,5,5],[5,5,5]]
<strong>解释:</strong>
- diff[0][0] = onesRow<sub>0</sub> + onesCol<sub>0</sub> - zerosRow<sub>0</sub> - zerosCol<sub>0</sub> = 3 + 2 - 0 - 0 = 5
- diff[0][1] = onesRow<sub>0</sub> + onesCol<sub>1</sub> - zerosRow<sub>0</sub> - zerosCol<sub>1</sub> = 3 + 2 - 0 - 0 = 5
- diff[0][2] = onesRow<sub>0</sub> + onesCol<sub>2</sub> - zerosRow<sub>0</sub> - zerosCol<sub>2</sub> = 3 + 2 - 0 - 0 = 5
- diff[1][0] = onesRow<sub>1</sub> + onesCol<sub>0</sub> - zerosRow<sub>1</sub> - zerosCol<sub>0</sub> = 3 + 2 - 0 - 0 = 5
- diff[1][1] = onesRow<sub>1</sub> + onesCol<sub>1</sub> - zerosRow<sub>1</sub> - zerosCol<sub>1</sub> = 3 + 2 - 0 - 0 = 5
- diff[1][2] = onesRow<sub>1</sub> + onesCol<sub>2</sub> - zerosRow<sub>1</sub> - zerosCol<sub>2</sub> = 3 + 2 - 0 - 0 = 5
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>m == grid.length</code></li>
<li><code>n == grid[i].length</code></li>
<li><code>1 &lt;= m, n &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= m * n &lt;= 10<sup>5</sup></code></li>
<li><code>grid[i][j]</code>&nbsp;要么是&nbsp;<code>0</code>&nbsp;,要么是&nbsp;<code>1</code></li>
</ul>

View File

@@ -0,0 +1,44 @@
<p>给你两个仅由小写英文字母组成的字符串 <code>s</code><code>t</code></p>
<p>现在需要通过向 <code>s</code> 末尾追加字符的方式使 <code>t</code> 变成 <code>s</code> 的一个 <strong>子序列</strong> ,返回需要追加的最少字符数。</p>
<p>子序列是一个可以由其他字符串删除部分(或不删除)字符但不改变剩下字符顺序得到的字符串。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>s = "coaching", t = "coding"
<strong>输出:</strong>4
<strong>解释:</strong>向 s 末尾追加字符串 "ding" s = "coachingding" 。
现在t 是 s ("<em><strong>co</strong></em>aching<em><strong>ding</strong></em>") 的一个子序列。
可以证明向 s 末尾追加任何 3 个字符都无法使 t 成为 s 的一个子序列。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>s = "abcde", t = "a"
<strong>输出:</strong>0
<strong>解释:</strong>t 已经是 s ("<em><strong>a</strong></em>bcde") 的一个子序列。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>s = "z", t = "abcde"
<strong>输出:</strong>5
<strong>解释:</strong>向 s 末尾追加字符串 "abcde" s = "zabcde" 。
现在t 是 s ("z<em><strong>abcde</strong></em>") 的一个子序列。
可以证明向 s 末尾追加任何 4 个字符都无法使 t 成为 s 的一个子序列。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length, t.length &lt;= 10<sup>5</sup></code></li>
<li><code>s</code><code>t</code> 仅由小写英文字母组成</li>
</ul>