Skip to content

Commit

Permalink
Big Update!!!更新了题库,包括200多道新增以及约十道的更新。
Browse files Browse the repository at this point in the history
  • Loading branch information
LetMeFly666 committed Jan 3, 2023
1 parent eac545f commit 3c322dd
Show file tree
Hide file tree
Showing 209 changed files with 11,376 additions and 97 deletions.
60 changes: 60 additions & 0 deletions AllProblems/2293.极大极小游戏.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
title: 2293.极大极小游戏
date: 2023-01-03 18-52-18
tags: [题解, LeetCode, 简单, 数组, 模拟]
---

# 【LetMeFly】2293.极大极小游戏

力扣题目链接:[https://leetcode.cn/problems/min-max-game/](https://leetcode.cn/problems/min-max-game/)

<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> ,其长度是 <code>2</code> 的幂。</p>

<p>对 <code>nums</code> 执行下述算法:</p>

<ol>
<li>设 <code>n</code> 等于 <code>nums</code> 的长度,如果 <code>n == 1</code> ,<strong>终止</strong> 算法过程。否则,<strong>创建</strong> 一个新的整数数组&nbsp;<code>newNums</code> ,新数组长度为 <code>n / 2</code> ,下标从 <strong>0</strong> 开始。</li>
<li>对于满足&nbsp;<code>0 &lt;= i &lt; n / 2</code> 的每个 <strong>偶数</strong> 下标 <code>i</code> ,将 <code>newNums[i]</code> <strong>赋值</strong> 为 <code>min(nums[2 * i], nums[2 * i + 1])</code> 。</li>
<li>对于满足&nbsp;<code>0 &lt;= i &lt; n / 2</code> 的每个 <strong>奇数</strong> 下标 <code>i</code> ,将 <code>newNums[i]</code> <strong>赋值</strong> 为 <code>max(nums[2 * i], nums[2 * i + 1])</code> 。</li>
<li>用 <code>newNums</code> 替换 <code>nums</code> 。</li>
<li>从步骤 1 开始 <strong>重复</strong> 整个过程。</li>
</ol>

<p>执行算法后,返回 <code>nums</code> 中剩下的那个数字。</p>

<p>&nbsp;</p>

<p><strong>示例 1:</strong></p>

<p><img alt="" src="https://assets.leetcode.com/uploads/2022/04/13/example1drawio-1.png" style="width: 500px; height: 240px;" /></p>

<pre>
<strong>输入:</strong>nums = [1,3,5,2,4,8,2,2]
<strong>输出:</strong>1
<strong>解释:</strong>重复执行算法会得到下述数组。
第一轮:nums = [1,5,4,2]
第二轮:nums = [1,4]
第三轮:nums = [1]
1 是最后剩下的那个数字,返回 1 。
</pre>

<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong>nums = [3]
<strong>输出:</strong>3
<strong>解释:</strong>3 就是最后剩下的数字,返回 3 。
</pre>

<p>&nbsp;</p>

<p><strong>提示:</strong></p>

<ul>
<li><code>1 &lt;= nums.length &lt;= 1024</code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
<li><code>nums.length</code> 是 <code>2</code> 的幂</li>
</ul>



67 changes: 67 additions & 0 deletions AllProblems/2294.划分数组使最大差为 K.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
title: 2294.划分数组使最大差为 K
date: 2023-01-03 18-52-18
tags: [题解, LeetCode, 中等, 贪心, 数组, 排序]
---

# 【LetMeFly】2294.划分数组使最大差为 K

力扣题目链接:[https://leetcode.cn/problems/partition-array-such-that-maximum-difference-is-k/](https://leetcode.cn/problems/partition-array-such-that-maximum-difference-is-k/)

<p>给你一个整数数组 <code>nums</code> 和一个整数 <code>k</code> 。你可以将 <code>nums</code> 划分成一个或多个 <strong>子序列</strong> ,使 <code>nums</code> 中的每个元素都 <strong>恰好</strong> 出现在一个子序列中。</p>

<p>在满足每个子序列中最大值和最小值之间的差值最多为 <code>k</code> 的前提下,返回需要划分的 <strong>最少</strong> 子序列数目。</p>

<p><strong>子序列</strong> 本质是一个序列,可以通过删除另一个序列中的某些元素(或者不删除)但不改变剩下元素的顺序得到。</p>

<p>&nbsp;</p>

<p><strong>示例 1:</strong></p>

<pre>
<strong>输入:</strong>nums = [3,6,1,2,5], k = 2
<strong>输出:</strong>2
<strong>解释:</strong>
可以将 nums 划分为两个子序列 [3,1,2] 和 [6,5] 。
第一个子序列中最大值和最小值的差值是 3 - 1 = 2 。
第二个子序列中最大值和最小值的差值是 6 - 5 = 1 。
由于创建了两个子序列,返回 2 。可以证明需要划分的最少子序列数目就是 2 。
</pre>

<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong>nums = [1,2,3], k = 1
<strong>输出:</strong>2
<strong>解释:</strong>
可以将 nums 划分为两个子序列 [1,2] 和 [3] 。
第一个子序列中最大值和最小值的差值是 2 - 1 = 1 。
第二个子序列中最大值和最小值的差值是 3 - 3 = 0 。
由于创建了两个子序列,返回 2 。注意,另一种最优解法是将 nums 划分成子序列 [1] 和 [2,3] 。
</pre>

<p><strong>示例 3:</strong></p>

<pre>
<strong>输入:</strong>nums = [2,2,4,5], k = 0
<strong>输出:</strong>3
<strong>解释:</strong>
可以将 nums 划分为三个子序列 [2,2]、[4] 和 [5] 。
第一个子序列中最大值和最小值的差值是 2 - 2 = 0 。
第二个子序列中最大值和最小值的差值是 4 - 4 = 0 。
第三个子序列中最大值和最小值的差值是 5 - 5 = 0 。
由于创建了三个子序列,返回 3 。可以证明需要划分的最少子序列数目就是 3 。
</pre>

<p>&nbsp;</p>

<p><strong>提示:</strong></p>

<ul>
<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= nums[i] &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= k &lt;= 10<sup>5</sup></code></li>
</ul>



62 changes: 62 additions & 0 deletions AllProblems/2295.替换数组中的元素.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
title: 2295.替换数组中的元素
date: 2023-01-03 18-52-19
tags: [题解, LeetCode, 中等, 数组, 哈希表, 模拟]
---

# 【LetMeFly】2295.替换数组中的元素

力扣题目链接:[https://leetcode.cn/problems/replace-elements-in-an-array/](https://leetcode.cn/problems/replace-elements-in-an-array/)

<p>给你一个下标从 <strong>0</strong>&nbsp;开始的数组&nbsp;<code>nums</code>&nbsp;,它包含 <code>n</code>&nbsp;个 <strong>互不相同</strong>&nbsp;的正整数。请你对这个数组执行 <code>m</code>&nbsp;个操作,在第 <code>i</code>&nbsp;个操作中,你需要将数字&nbsp;<code>operations[i][0]</code> 替换成&nbsp;<code>operations[i][1]</code>&nbsp;。</p>

<p>题目保证在第 <code>i</code>&nbsp;个操作中:</p>

<ul>
<li><code>operations[i][0]</code>&nbsp;在&nbsp;<code>nums</code>&nbsp;中存在。</li>
<li><code>operations[i][1]</code>&nbsp;在&nbsp;<code>nums</code>&nbsp;中不存在。</li>
</ul>

<p>请你返回执行完所有操作后的数组。</p>

<p>&nbsp;</p>

<p><strong>示例 1:</strong></p>

<pre><b>输入:</b>nums = [1,2,4,6], operations = [[1,3],[4,7],[6,1]]
<b>输出:</b>[3,2,7,1]
<b>解释:</b>我们对 nums 执行以下操作:
- 将数字 1 替换为 3 。nums 变为 [<em><strong>3</strong></em>,2,4,6] 。
- 将数字 4 替换为 7 。nums 变为 [3,2,<em><strong>7</strong></em>,6] 。
- 将数字 6 替换为 1 。nums 变为 [3,2,7,<em><strong>1</strong></em>] 。
返回最终数组 [3,2,7,1] 。
</pre>

<p><strong>示例 2:</strong></p>

<pre><b>输入:</b>nums = [1,2], operations = [[1,3],[2,1],[3,2]]
<b>输出:</b>[2,1]
<b>解释:</b>我们对 nums 执行以下操作:
- 将数字 1 替换为 3 。nums 变为 [<em><strong>3</strong></em>,2] 。
- 将数字 2 替换为 1 。nums 变为 [3,<em><strong>1</strong></em>] 。
- 将数字 3 替换为 2 。nums 变为 [<em><strong>2</strong></em>,1] 。
返回最终数组 [2,1] 。
</pre>

<p>&nbsp;</p>

<p><strong>提示:</strong></p>

<ul>
<li><code>n == nums.length</code></li>
<li><code>m == operations.length</code></li>
<li><code>1 &lt;= n, m &lt;= 10<sup>5</sup></code></li>
<li><code>nums</code>&nbsp;中所有数字 <strong>互不相同</strong>&nbsp;。</li>
<li><code>operations[i].length == 2</code></li>
<li><code>1 &lt;= nums[i], operations[i][0], operations[i][1] &lt;= 10<sup>6</sup></code></li>
<li>在执行第&nbsp;<code>i</code> 个操作时,<code>operations[i][0]</code>&nbsp;在&nbsp;<code>nums</code>&nbsp;中存在。</li>
<li>在执行第&nbsp;<code>i</code>&nbsp;个操作时,<code>operations[i][1]</code>&nbsp;在&nbsp;<code>nums</code>&nbsp;中不存在。</li>
</ul>



83 changes: 83 additions & 0 deletions AllProblems/2296.设计一个文本编辑器.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
title: 2296.设计一个文本编辑器
date: 2023-01-03 18-52-19
tags: [题解, LeetCode, 困难, 栈, 设计, 链表, 字符串, 双向链表, 模拟]
---

# 【LetMeFly】2296.设计一个文本编辑器

力扣题目链接:[https://leetcode.cn/problems/design-a-text-editor/](https://leetcode.cn/problems/design-a-text-editor/)

<p>请你设计一个带光标的文本编辑器,它可以实现以下功能:</p>

<ul>
<li><strong>添加:</strong>在光标所在处添加文本。</li>
<li><strong>删除:</strong>在光标所在处删除文本(模拟键盘的删除键)。</li>
<li><strong>移动:</strong>将光标往左或者往右移动。</li>
</ul>

<p>当删除文本时,只有光标左边的字符会被删除。光标会留在文本内,也就是说任意时候&nbsp;<code>0 &lt;= cursor.position &lt;= currentText.length</code>&nbsp;都成立。</p>

<p>请你实现&nbsp;<code>TextEditor</code>&nbsp;类:</p>

<ul>
<li><code>TextEditor()</code>&nbsp;用空文本初始化对象。</li>
<li><code>void addText(string text)</code>&nbsp;将&nbsp;<code>text</code>&nbsp;添加到光标所在位置。添加完后光标在&nbsp;<code>text</code>&nbsp;的右边。</li>
<li><code>int deleteText(int k)</code>&nbsp;删除光标左边&nbsp;<code>k</code>&nbsp;个字符。返回实际删除的字符数目。</li>
<li><code>string cursorLeft(int k)</code> 将光标向左移动&nbsp;<code>k</code>&nbsp;次。返回移动后光标左边&nbsp;<code>min(10, len)</code>&nbsp;个字符,其中&nbsp;<code>len</code>&nbsp;是光标左边的字符数目。</li>
<li><code>string cursorRight(int k)</code>&nbsp;将光标向右移动&nbsp;<code>k</code>&nbsp;次。返回移动后光标左边&nbsp;<code>min(10, len)</code>&nbsp;个字符,其中&nbsp;<code>len</code>&nbsp;是光标左边的字符数目。</li>
</ul>

<p>&nbsp;</p>

<p><strong>示例 1:</strong></p>

<pre>
<strong>输入:</strong>
["TextEditor", "addText", "deleteText", "addText", "cursorRight", "cursorLeft", "deleteText", "cursorLeft", "cursorRight"]
[[], ["leetcode"], [4], ["practice"], [3], [8], [10], [2], [6]]
<strong>输出:</strong>
[null, null, 4, null, "etpractice", "leet", 4, "", "practi"]

<strong>解释:</strong>
TextEditor textEditor = new TextEditor(); // 当前 text 为 "|" 。('|' 字符表示光标)
textEditor.addText("leetcode"); // 当前文本为 "leetcode|" 。
textEditor.deleteText(4); // 返回 4
// 当前文本为 "leet|" 。
// 删除了 4 个字符。
textEditor.addText("practice"); // 当前文本为 "leetpractice|" 。
textEditor.cursorRight(3); // 返回 "etpractice"
// 当前文本为 "leetpractice|".
// 光标无法移动到文本以外,所以无法移动。
// "etpractice" 是光标左边的 10 个字符。
textEditor.cursorLeft(8); // 返回 "leet"
// 当前文本为 "leet|practice" 。
// "leet" 是光标左边的 min(10, 4) = 4 个字符。
textEditor.deleteText(10); // 返回 4
// 当前文本为 "|practice" 。
// 只有 4 个字符被删除了。
textEditor.cursorLeft(2); // 返回 ""
// 当前文本为 "|practice" 。
// 光标无法移动到文本以外,所以无法移动。
// "" 是光标左边的 min(10, 0) = 0 个字符。
textEditor.cursorRight(6); // 返回 "practi"
// 当前文本为 "practi|ce" 。
// "practi" 是光标左边的 min(10, 6) = 6 个字符。
</pre>

<p>&nbsp;</p>

<p><strong>提示:</strong></p>

<ul>
<li><code>1 &lt;= text.length, k &lt;= 40</code></li>
<li><code>text</code>&nbsp;只含有小写英文字母。</li>
<li>调用 <code>addText</code>&nbsp;,<code>deleteText</code>&nbsp;,<code>cursorLeft</code> 和&nbsp;<code>cursorRight</code>&nbsp;的 <strong>总</strong> 次数不超过&nbsp;<code>2 * 10<sup>4</sup></code>&nbsp;次。</li>
</ul>

<p>&nbsp;</p>

<p><strong>进阶:</strong>你能设计并实现一个每次调用时间复杂度为 <code>O(k)</code> 的解决方案吗?</p>



56 changes: 56 additions & 0 deletions AllProblems/2299.强密码检验器 II.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
title: 2299.强密码检验器 II
date: 2023-01-03 18-52-21
tags: [题解, LeetCode, 简单, 字符串]
---

# 【LetMeFly】2299.强密码检验器 II

力扣题目链接:[https://leetcode.cn/problems/strong-password-checker-ii/](https://leetcode.cn/problems/strong-password-checker-ii/)

<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>



54 changes: 54 additions & 0 deletions AllProblems/2300.咒语和药水的成功对数.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: 2300.咒语和药水的成功对数
date: 2023-01-03 18-52-21
tags: [题解, LeetCode, 中等, 数组, 双指针, 二分查找, 排序]
---

# 【LetMeFly】2300.咒语和药水的成功对数

力扣题目链接:[https://leetcode.cn/problems/successful-pairs-of-spells-and-potions/](https://leetcode.cn/problems/successful-pairs-of-spells-and-potions/)

<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>



Loading

0 comments on commit 3c322dd

Please sign in to comment.