1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-10-19 12:06:48 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
This commit is contained in:
2022-06-18 16:20:32 +08:00
parent 6ba311f0f3
commit 8891b38740
50 changed files with 16483 additions and 11625 deletions

View File

@@ -0,0 +1,49 @@
<p>给你一个字符串数组 <code>ideas</code> 表示在公司命名过程中使用的名字列表。公司命名流程如下:</p>
<ol>
<li><code>ideas</code> 中选择 2 个 <strong>不同</strong> 名字,称为 <code>idea<sub>A</sub></code><code>idea<sub>B</sub></code></li>
<li>交换 <code>idea<sub>A</sub></code><code>idea<sub>B</sub></code> 的首字母。</li>
<li>如果得到的两个新名字 <strong></strong> 不在 <code>ideas</code> 中,那么 <code>idea<sub>A</sub> idea<sub>B</sub></code><strong>串联</strong> <code>idea<sub>A</sub></code><code>idea<sub>B</sub></code> ,中间用一个空格分隔)是一个有效的公司名字。</li>
<li>否则,不是一个有效的名字。</li>
</ol>
<p>返回 <strong>不同</strong> 且有效的公司名字的数目。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>ideas = ["coffee","donuts","time","toffee"]
<strong>输出:</strong>6
<strong>解释:</strong>下面列出一些有效的选择方案:
- ("coffee", "donuts"):对应的公司名字是 "doffee conuts" 。
- ("donuts", "coffee"):对应的公司名字是 "conuts doffee" 。
- ("donuts", "time"):对应的公司名字是 "tonuts dime" 。
- ("donuts", "toffee"):对应的公司名字是 "tonuts doffee" 。
- ("time", "donuts"):对应的公司名字是 "dime tonuts" 。
- ("toffee", "donuts"):对应的公司名字是 "doffee tonuts" 。
因此,总共有 6 个不同的公司名字。
下面列出一些无效的选择方案:
- ("coffee", "time"):在原数组中存在交换后形成的名字 "toffee" 。
- ("time", "toffee"):在原数组中存在交换后形成的两个名字。
- ("coffee", "toffee"):在原数组中存在交换后形成的两个名字。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>ideas = ["lack","back"]
<strong>输出:</strong>0
<strong>解释:</strong>不存在有效的选择方案。因此,返回 0 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= ideas.length &lt;= 5 * 10<sup>4</sup></code></li>
<li><code>1 &lt;= ideas[i].length &lt;= 10</code></li>
<li><code>ideas[i]</code> 由小写英文字母组成</li>
<li><code>ideas</code> 中的所有字符串 <strong>互不相同</strong></li>
</ul>

View File

@@ -0,0 +1,40 @@
<p>给你一个整数数组 <code>cookies</code> ,其中 <code>cookies[i]</code> 表示在第 <code>i</code> 个零食包中的饼干数量。另给你一个整数 <code>k</code> 表示等待分发零食包的孩子数量,<strong>所有</strong> 零食包都需要分发。在同一个零食包中的所有饼干都必须分发给同一个孩子,不能分开。</p>
<p>分发的 <strong>不公平程度</strong> 定义为单个孩子在分发过程中能够获得饼干的最大总数。</p>
<p>返回所有分发的最小不公平程度。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>cookies = [8,15,10,20,8], k = 2
<strong>输出:</strong>31
<strong>解释:</strong>一种最优方案是 [8,15,8] 和 [10,20] 。
- 第 1 个孩子分到 [8,15,8] ,总计 8 + 15 + 8 = 31 块饼干。
- 第 2 个孩子分到 [10,20] ,总计 10 + 20 = 30 块饼干。
分发的不公平程度为 max(31,30) = 31 。
可以证明不存在不公平程度小于 31 的分发方案。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>cookies = [6,1,3,2,2,4,1,2], k = 3
<strong>输出:</strong>7
<strong>解释:</strong>一种最优方案是 [6,1]、[3,2,2] 和 [4,1,2] 。
- 第 1 个孩子分到 [6,1] ,总计 6 + 1 = 7 块饼干。
- 第 2 个孩子分到 [3,2,2] ,总计 3 + 2 + 2 = 7 块饼干。
- 第 3 个孩子分到 [4,1,2] ,总计 4 + 1 + 2 = 7 块饼干。
分发的不公平程度为 max(7,7,7) = 7 。
可以证明不存在不公平程度小于 7 的分发方案。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= cookies.length &lt;= 8</code></li>
<li><code>1 &lt;= cookies[i] &lt;= 10<sup>5</sup></code></li>
<li><code>2 &lt;= k &lt;= cookies.length</code></li>
</ul>

View File

@@ -0,0 +1,41 @@
<p>给你两个正整数数组&nbsp;<code>spells</code>&nbsp;<code>potions</code>&nbsp;,长度分别为&nbsp;<code>n</code>&nbsp;<code>m</code>&nbsp;,其中&nbsp;<code>spells[i]</code>&nbsp;表示第&nbsp;<code>i</code>&nbsp;个咒语的能量强度,<code>potions[j]</code>&nbsp;表示第&nbsp;<code>j</code>&nbsp;瓶药水的能量强度。</p>
<p>同时给你一个整数&nbsp;<code>success</code>&nbsp;。一个咒语和药水的能量强度 <strong>相乘</strong> 如果&nbsp;<strong>大于等于</strong>&nbsp;<code>success</code>&nbsp;,那么它们视为一对&nbsp;<strong>成功</strong>&nbsp;的组合。</p>
<p>请你返回一个长度为 <code>n</code>&nbsp;的整数数组<em>&nbsp;</em><code>pairs</code>,其中<em>&nbsp;</em><code>pairs[i]</code>&nbsp;是能跟第 <code>i</code>&nbsp;个咒语成功组合的 <b>药水</b>&nbsp;数目。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>spells = [5,1,3], potions = [1,2,3,4,5], success = 7
<b>输出:</b>[4,0,3]
<strong>解释:</strong>
- 第 0 个咒语5 * [1,2,3,4,5] = [5,<em><strong>10</strong></em>,<em><strong>15</strong></em>,<em><strong>20</strong></em>,<em><strong>25</strong></em>] 。总共 4 个成功组合。
- 第 1 个咒语1 * [1,2,3,4,5] = [1,2,3,4,5] 。总共 0 个成功组合。
- 第 2 个咒语3 * [1,2,3,4,5] = [3,6,<em><strong>9</strong></em>,<em><strong>12</strong></em>,<em><strong>15</strong></em>] 。总共 3 个成功组合。
所以返回 [4,0,3] 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>spells = [3,1,2], potions = [8,5,8], success = 16
<b>输出:</b>[2,0,2]
<strong>解释:</strong>
- 第 0 个咒语3 * [8,5,8] = [<em><strong>24</strong></em>,15,<em><strong>24</strong></em>] 。总共 2 个成功组合。
- 第 1 个咒语1 * [8,5,8] = [8,5,8] 。总共 0 个成功组合。
- 第 2 个咒语2 * [8,5,8] = [<em><strong>16</strong></em>,10,<em><strong>16</strong></em>] 。总共 2 个成功组合。
所以返回 [2,0,2] 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == spells.length</code></li>
<li><code>m == potions.length</code></li>
<li><code>1 &lt;= n, m &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= spells[i], potions[i] &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= success &lt;= 10<sup>10</sup></code></li>
</ul>

View File

@@ -0,0 +1,43 @@
<p>如果一个密码满足以下所有条件,我们称它是一个 <strong></strong>&nbsp;密码:</p>
<ul>
<li>它有至少 <code>8</code>&nbsp;个字符。</li>
<li>至少包含 <strong>一个小写英文</strong>&nbsp;字母。</li>
<li>至少包含 <strong>一个大写英文</strong>&nbsp;字母。</li>
<li>至少包含 <strong>一个数字</strong>&nbsp;</li>
<li>至少包含 <strong>一个特殊字符</strong>&nbsp;。特殊字符为:<code>"!@#$%^&amp;*()-+"</code>&nbsp;中的一个。</li>
<li><strong></strong>&nbsp;包含&nbsp;<code>2</code>&nbsp;个连续相同的字符(比方说&nbsp;<code>"aab"</code>&nbsp;不符合该条件,但是&nbsp;<code>"aba"</code>&nbsp;符合该条件)。</li>
</ul>
<p>给你一个字符串&nbsp;<code>password</code>&nbsp;,如果它是一个&nbsp;<strong></strong>&nbsp;密码,返回&nbsp;<code>true</code>,否则返回&nbsp;<code>false</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>password = "IloveLe3tcode!"
<b>输出:</b>true
<b>解释:</b>密码满足所有的要求,所以我们返回 true 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>password = "Me+You--IsMyDream"
<b>输出:</b>false
<b>解释:</b>密码不包含数字,且包含 2 个连续相同的字符。所以我们返回 false 。
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>password = "1aB!"
<b>输出:</b>false
<b>解释:</b>密码不符合长度要求。所以我们返回 false 。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= password.length &lt;= 100</code></li>
<li><code>password</code>&nbsp;包含字母,数字和&nbsp;<code>"!@#$%^&amp;*()-+"</code>&nbsp;这些特殊字符。</li>
</ul>

View File

@@ -0,0 +1,46 @@
<p>给你两个字符串&nbsp;<code>s</code>&nbsp;<code>sub</code>&nbsp;。同时给你一个二维字符数组&nbsp;<code>mappings</code> ,其中&nbsp;<code>mappings[i] = [old<sub>i</sub>, new<sub>i</sub>]</code>&nbsp;表示你可以将&nbsp;<code>sub</code>&nbsp;中任意数目的&nbsp;<code>old<sub>i</sub></code>&nbsp;字符替换为&nbsp;<code>new<sub>i</sub></code>&nbsp;<code>sub</code>&nbsp;中每个字符 <b>不能</b>&nbsp;被替换超过一次。</p>
<p>如果使用 <code>mappings</code>&nbsp;替换 0 个或者若干个字符,可以将 <code>sub</code>&nbsp;变成 <code>s</code>&nbsp;的一个子字符串,请你返回&nbsp;<code>true</code>,否则返回&nbsp;<code>false</code>&nbsp;</p>
<p>一个 <strong>子字符串</strong>&nbsp;是字符串中连续非空的字符序列。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>s = "fool3e7bar", sub = "leet", mappings = [["e","3"],["t","7"],["t","8"]]
<b>输出:</b>true
<b>解释:</b>将 sub 中第一个 'e' 用 '3' 替换,将 't' 用 '7' 替换。
现在 sub = "l3e7" ,它是 s 的子字符串,所以我们返回 true 。</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>s = "fooleetbar", sub = "f00l", mappings = [["o","0"]]
<b>输出:</b>false
<b>解释:</b>字符串 "f00l" 不是 s 的子串且没有可以进行的修改。
注意我们不能用 'o' 替换 '0' 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<b>输入:</b>s = "Fool33tbaR", sub = "leetd", mappings = [["e","3"],["t","7"],["t","8"],["d","b"],["p","b"]]
<b>输出:</b>true
<b>解释:</b>将 sub 里第一个和第二个 'e' 用 '3' 替换,用 'b' 替换 sub 里的 'd' 。
得到 sub = "l33tb" ,它是 s 的子字符串,所以我们返回 true 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= sub.length &lt;= s.length &lt;= 5000</code></li>
<li><code>0 &lt;= mappings.length &lt;= 1000</code></li>
<li><code>mappings[i].length == 2</code></li>
<li><code>old<sub>i</sub> != new<sub>i</sub></code></li>
<li><code>s</code>&nbsp;<code>sub</code>&nbsp;只包含大写和小写英文字母和数字。</li>
<li><code>old<sub>i</sub></code>&nbsp;<code>new<sub>i</sub></code>&nbsp;是大写、小写字母或者是个数字。</li>
</ul>

View File

@@ -0,0 +1,47 @@
<p>一个数字的 <strong>分数</strong>&nbsp;定义为数组之和 <strong>乘以</strong>&nbsp;数组的长度。</p>
<ul>
<li>比方说,<code>[1, 2, 3, 4, 5]</code>&nbsp;的分数为&nbsp;<code>(1 + 2 + 3 + 4 + 5) * 5 = 75</code>&nbsp;</li>
</ul>
<p>给你一个正整数数组&nbsp;<code>nums</code>&nbsp;和一个整数&nbsp;<code>k</code>&nbsp;,请你返回&nbsp;<code>nums</code>&nbsp;中分数&nbsp;<strong>严格小于&nbsp;</strong><code>k</code>&nbsp;&nbsp;<strong>非空整数子数组数目</strong></p>
<p><strong>子数组</strong> 是数组中的一个连续元素序列。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>nums = [2,1,4,3,5], k = 10
<b>输出:</b>6
<strong>解释:</strong>
有 6 个子数组的分数小于 10
- [2] 分数为 2 * 1 = 2 。
- [1] 分数为 1 * 1 = 1 。
- [4] 分数为 4 * 1 = 4 。
- [3] 分数为 3 * 1 = 3 。
- [5] 分数为 5 * 1 = 5 。
- [2,1] 分数为 (2 + 1) * 2 = 6 。
注意,子数组 [1,4] 和 [4,3,5] 不符合要求,因为它们的分数分别为 10 和 36但我们要求子数组的分数严格小于 10 。</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>nums = [1,1,1], k = 5
<b>输出:</b>5
<strong>解释:</strong>
除了 [1,1,1] 以外每个子数组分数都小于 5 。
[1,1,1] 分数为 (1 + 1 + 1) * 3 = 9 ,大于 5 。
所以总共有 5 个子数组得分小于 5 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= k &lt;= 10<sup>15</sup></code></li>
</ul>

View File

@@ -0,0 +1,46 @@
<p>给你一个下标从 <strong>0</strong> 开始的整数矩阵&nbsp;<code>grid</code> ,矩阵大小为 <code>m x n</code> ,由从 <code>0</code><code>m * n - 1</code> 的不同整数组成。你可以在此矩阵中,从一个单元格移动到 <strong>下一行</strong> 的任何其他单元格。如果你位于单元格 <code>(x, y)</code> ,且满足 <code>x &lt; m - 1</code> ,你可以移动到 <code>(x + 1, 0)</code>, <code>(x + 1, 1)</code>, ..., <code>(x + 1, n - 1)</code><strong> </strong>中的任何一个单元格。<strong>注意:</strong>&nbsp;在最后一行中的单元格不能触发移动。</p>
<p>每次可能的移动都需要付出对应的代价,代价用一个下标从 <strong>0</strong> 开始的二维数组 <code>moveCost</code> 表示,该数组大小为 <code>(m * n) x n</code> ,其中 <code>moveCost[i][j]</code> 是从值为 <code>i</code> 的单元格移动到下一行第 <code>j</code> 列单元格的代价。从&nbsp;<code>grid</code> 最后一行的单元格移动的代价可以忽略。</p>
<p><code>grid</code> 一条路径的代价是:所有路径经过的单元格的 <strong>值之和</strong> 加上 所有移动的 <strong>代价之和 </strong>。从 <strong>第一行</strong> 任意单元格出发,返回到达 <strong>最后一行</strong> 任意单元格的最小路径代价<em></em></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/04/28/griddrawio-2.png" style="width: 301px; height: 281px;" /></p>
<pre>
<strong>输入:</strong>grid = [[5,3],[4,0],[2,1]], moveCost = [[9,8],[1,5],[10,12],[18,6],[2,4],[14,3]]
<strong>输出:</strong>17
<strong>解释:</strong>最小代价的路径是 5 -&gt; 0 -&gt; 1 。
- 路径途经单元格值之和 5 + 0 + 1 = 6 。
- 从 5 移动到 0 的代价为 3 。
- 从 0 移动到 1 的代价为 8 。
路径总代价为 6 + 3 + 8 = 17 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>grid = [[5,1,2],[4,0,3]], moveCost = [[12,10,15],[20,23,8],[21,7,1],[8,1,13],[9,10,25],[5,3,2]]
<strong>输出:</strong>6
<strong>解释:</strong>
最小代价的路径是 2 -&gt; 3 。
- 路径途经单元格值之和 2 + 3 = 5 。
- 从 2 移动到 3 的代价为 1 。
路径总代价为 5 + 1 = 6 。</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>2 &lt;= m, n &lt;= 50</code></li>
<li><code>grid</code> 由从 <code>0</code><code>m * n - 1</code> 的不同整数组成</li>
<li><code>moveCost.length == m * n</code></li>
<li><code>moveCost[i].length == n</code></li>
<li><code>1 &lt;= moveCost[i][j] &lt;= 100</code></li>
</ul>

View File

@@ -0,0 +1,57 @@
<p>给你一个下标从 <strong>0</strong> 开始的二维整数数组 <code>brackets</code> ,其中 <code>brackets[i] = [upper<sub>i</sub>, percent<sub>i</sub>]</code> ,表示第 <code>i</code> 个税级的上限是 <code>upper<sub>i</sub></code> ,征收的税率为 <code>percent<sub>i</sub></code> 。税级按上限 <strong>从低到高排序</strong>(在满足 <code>0 &lt; i &lt; brackets.length</code> 的前提下,<code>upper<sub>i-1</sub> &lt; upper<sub>i</sub></code>)。</p>
<p>税款计算方式如下:</p>
<ul>
<li>不超过 <code>upper<sub>0</sub></code> 的收入按税率 <code>percent<sub>0</sub></code> 缴纳</li>
<li>接着 <code>upper<sub>1</sub> - upper<sub>0</sub></code> 的部分按税率 <code>percent<sub>1</sub></code> 缴纳</li>
<li>然后 <code>upper<sub>2</sub> - upper<sub>1</sub></code> 的部分按税率 <code>percent<sub>2</sub></code> 缴纳</li>
<li>以此类推</li>
</ul>
<p>给你一个整数 <code>income</code> 表示你的总收入。返回你需要缴纳的税款总额。与标准答案误差不超 <code>10<sup>-5</sup></code> 的结果将被视作正确答案。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>brackets = [[3,50],[7,10],[12,25]], income = 10
<strong>输出:</strong>2.65000
<strong>解释:</strong>
前 $3 的税率为 50% 。需要支付税款 $3 * 50% = $1.50 。
接下来 $7 - $3 = $4 的税率为 10% 。需要支付税款 $4 * 10% = $0.40 。
最后 $10 - $7 = $3 的税率为 25% 。需要支付税款 $3 * 25% = $0.75 。
需要支付的税款总计 $1.50 + $0.40 + $0.75 = $2.65 。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>brackets = [[1,0],[4,25],[5,50]], income = 2
<strong>输出:</strong>0.25000
<strong>解释:</strong>
前 $1 的税率为 0% 。需要支付税款 $1 * 0% = $0 。
剩下 $1 的税率为 25% 。需要支付税款 $1 * 25% = $0.25 。
需要支付的税款总计 $0 + $0.25 = $0.25 。
</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>brackets = [[2,50]], income = 0
<strong>输出:</strong>0.00000
<strong>解释:</strong>
没有收入,无需纳税,需要支付的税款总计 $0 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= brackets.length &lt;= 100</code></li>
<li><code>1 &lt;= upper<sub>i</sub> &lt;= 1000</code></li>
<li><code>0 &lt;= percent<sub>i</sub> &lt;= 100</code></li>
<li><code>0 &lt;= income &lt;= 1000</code></li>
<li><code>upper<sub>i</sub></code> 按递增顺序排列</li>
<li><code>upper<sub>i</sub></code> 中的所有值 <strong>互不相同</strong></li>
<li>最后一个税级的上限大于等于 <code>income</code></li>
</ul>