1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-10-19 20:16:48 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
This commit is contained in:
2022-03-29 12:43:11 +08:00
parent 58bbdfd57c
commit 2b0511d272
10721 changed files with 8123 additions and 8119 deletions

View File

@@ -0,0 +1,25 @@
<p>给定一个放有字母和数字的数组,找到最长的子数组,且包含的字母和数字的个数相同。</p>
<p>返回该子数组,若存在多个最长子数组,返回左端点下标值最小的子数组。若不存在这样的数组,返回一个空数组。</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入: </strong>["A","1","B","C","D","2","3","4","E","5","F","G","6","7","H","I","J","K","L","M"]
<strong>输出: </strong>["A","1","B","C","D","2","3","4","E","5","F","G","6","7"]
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入: </strong>["A","A"]
<strong>输出: </strong>[]
</pre>
<p><strong>提示:</strong></p>
<ul>
<li><code>array.length <= 100000</code></li>
</ul>

View File

@@ -0,0 +1,30 @@
<p>给定一个二进制数组 <code>nums</code> , 找到含有相同数量的 <code>0</code><code>1</code> 的最长连续子数组,并返回该子数组的长度。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong> nums = [0,1]
<strong>输出:</strong> 2
<strong>说明:</strong> [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong> nums = [0,1,0]
<strong>输出:</strong> 2
<strong>说明:</strong> [0, 1] (或 [1, 0]) 是具有相同数量 0 和 1 的最长连续子数组。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
<li><code>nums[i]</code> 不是 <code>0</code> 就是 <code>1</code></li>
</ul>
<p>&nbsp;</p>
<p><meta charset="UTF-8" />注意:本题与主站 525&nbsp;题相同:&nbsp;<a href="https://leetcode-cn.com/problems/contiguous-array/">https://leetcode-cn.com/problems/contiguous-array/</a></p>

View File

@@ -0,0 +1,36 @@
<p>给定一个由 <code>0</code><code>1</code> 组成的矩阵 <code>mat</code> ,请输出一个大小相同的矩阵,其中每一个格子是 <code>mat</code> 中对应位置元素到最近的 <code>0</code> 的距离。</p>
<p>两个相邻元素间的距离为 <code>1</code></p>
<p> </p>
<p><b>示例 1</b></p>
<p><img alt="" src="https://pic.leetcode-cn.com/1626667201-NCWmuP-image.png" style="width: 150px; " /></p>
<pre>
<strong>输入:</strong>mat =<strong> </strong>[[0,0,0],[0,1,0],[0,0,0]]
<strong>输出:</strong>[[0,0,0],[0,1,0],[0,0,0]]
</pre>
<p><b>示例 2</b></p>
<p><img alt="" src="https://pic.leetcode-cn.com/1626667205-xFxIeK-image.png" style="width: 150px; " /></p>
<pre>
<b>输入:</b>mat =<b> </b>[[0,0,0],[0,1,0],[1,1,1]]
<strong>输出:</strong>[[0,0,0],[0,1,0],[1,2,1]]
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>m == mat.length</code></li>
<li><code>n == mat[i].length</code></li>
<li><code>1 <= m, n <= 10<sup>4</sup></code></li>
<li><code>1 <= m * n <= 10<sup>4</sup></code></li>
<li><code>mat[i][j] is either 0 or 1.</code></li>
<li><code>mat</code> 中至少有一个 <code>0 </code></li>
</ul>

View File

@@ -0,0 +1,20 @@
<p>一个长度为n-1的递增排序数组中的所有数字都是唯一的并且每个数字都在范围0n-1之内。在范围0n-1内的n个数字中有且只有一个数字不在该数组中请找出这个数字。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong> [0,1,3]
<strong>输出:</strong> 2
</pre>
<p><strong>示例&nbsp;2:</strong></p>
<pre><strong>输入:</strong> [0,1,2,3,4,5,6,7,9]
<strong>输出:</strong> 8</pre>
<p>&nbsp;</p>
<p><strong>限制:</strong></p>
<p><code>1 &lt;= 数组长度 &lt;= 10000</code></p>

View File

@@ -0,0 +1,37 @@
<p>有两种特殊字符:</p>
<ul>
<li>第一种字符可以用一比特&nbsp;<code>0</code> 表示</li>
<li>第二种字符可以用两比特(<code>10</code>&nbsp;&nbsp;<code>11</code>)表示</li>
</ul>
<p>给你一个以 <code>0</code> 结尾的二进制数组&nbsp;<code>bits</code>&nbsp;,如果最后一个字符必须是一个一比特字符,则返回 <code>true</code></p>
<p>&nbsp;</p>
<p><strong>示例&nbsp;1:</strong></p>
<pre>
<strong>输入:</strong> bits = [1, 0, 0]
<strong>输出:</strong> true
<strong>解释:</strong> 唯一的解码方式是将其解析为一个两比特字符和一个一比特字符。
所以最后一个字符是一比特字符。
</pre>
<p><strong>示例&nbsp;2:</strong></p>
<pre>
<strong>输入:</strong>bits = [1,1,1,0]
<strong>输出:</strong>false
<strong>解释:</strong>唯一的解码方式是将其解析为两比特字符和两比特字符。
所以最后一个字符不是一比特字符。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= bits.length &lt;= 1000</code></li>
<li><code>bits[i]</code><code>0</code><code>1</code></li>
</ul>

View File

@@ -0,0 +1,39 @@
<p>给你一个整数数组 <code>nums</code> ,数组中共有 <code>n</code> 个整数。<strong>132 模式的子序列</strong> 由三个整数 <code>nums[i]</code><code>nums[j]</code><code>nums[k]</code> 组成,并同时满足:<code>i < j < k</code><code>nums[i] < nums[k] < nums[j]</code></p>
<p>如果 <code>nums</code> 中存在 <strong>132 模式的子序列</strong> ,返回 <code>true</code> ;否则,返回 <code>false</code></p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,3,4]
<strong>输出:</strong>false
<strong>解释:</strong>序列中不存在 132 模式的子序列。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [3,1,4,2]
<strong>输出:</strong>true
<strong>解释:</strong>序列中有 1 个 132 模式的子序列: [1, 4, 2] 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums = [-1,3,2,0]
<strong>输出:</strong>true
<strong>解释:</strong>序列中有 3 个 132 模式的的子序列:[-1, 3, 2]、[-1, 3, 0] 和 [-1, 2, 0] 。
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == nums.length</code></li>
<li><code>1 <= n <= 2 * 10<sup>5</sup></code></li>
<li><code>-10<sup>9</sup> <= nums[i] <= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,28 @@
<p>输入一个整数 <code>n</code> 求1n这n个整数的十进制表示中1出现的次数。</p>
<p>例如输入12112这些整数中包含1 的数字有1、10、11和121一共出现了5次。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>n = 12
<strong>输出:</strong>5
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 13
<strong>输出:</strong>6</pre>
<p> </p>
<p><strong>限制:</strong></p>
<ul>
<li><code>1 <= n < 2^31</code></li>
</ul>
<p>注意:本题与主站 233 题相同:<a href="https://leetcode-cn.com/problems/number-of-digit-one/">https://leetcode-cn.com/problems/number-of-digit-one/</a></p>

View File

@@ -0,0 +1,54 @@
<p>给你一个整数 <code>n</code>,请你判断该整数是否是 2 的幂次方。如果是,返回 <code>true</code> ;否则,返回 <code>false</code></p>
<p>如果存在一个整数 <code>x</code> 使得 <code>n == 2<sup>x</sup></code> ,则认为 <code>n</code> 是 2 的幂次方。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>n = 1
<strong>输出:</strong>true
<strong>解释:</strong>2<sup>0</sup> = 1
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 16
<strong>输出:</strong>true
<strong>解释:</strong>2<sup>4</sup> = 16
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>n = 3
<strong>输出:</strong>false
</pre>
<p><strong>示例 4</strong></p>
<pre>
<strong>输入:</strong>n = 4
<strong>输出:</strong>true
</pre>
<p><strong>示例 5</strong></p>
<pre>
<strong>输入:</strong>n = 5
<strong>输出:</strong>false
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>-2<sup>31</sup> <= n <= 2<sup>31</sup> - 1</code></li>
</ul>
<p> </p>
<p><strong>进阶:</strong>你能够不使用循环/递归解决此问题吗?</p>

View File

@@ -0,0 +1,54 @@
<p>表: <code>Logins</code></p>
<pre>
+----------------+----------+
| 列名 | 类型 |
+----------------+----------+
| user_id | int |
| time_stamp | datetime |
+----------------+----------+
(user_id, time_stamp) 是这个表的主键。
每一行包含的信息是user_id 这个用户的登录时间。
</pre>
<p>&nbsp;</p>
<p>编写一个 SQL 查询,该查询可以获取在 <code>2020</code> 年登录过的所有用户的本年度 <strong>最后一次 </strong>登录时间。结果集 <strong></strong> 包含 <code>2020</code> 年没有登录过的用户。</p>
<p>返回的结果集可以按 <strong>任意顺序 </strong>排列。</p>
<p>查询结果格式如下例。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>
Logins 表:
+---------+---------------------+
| user_id | time_stamp |
+---------+---------------------+
| 6 | 2020-06-30 15:06:07 |
| 6 | 2021-04-21 14:06:06 |
| 6 | 2019-03-07 00:18:15 |
| 8 | 2020-02-01 05:10:53 |
| 8 | 2020-12-30 00:46:50 |
| 2 | 2020-01-16 02:49:50 |
| 2 | 2019-08-25 07:59:08 |
| 14 | 2019-07-14 09:00:00 |
| 14 | 2021-01-06 11:59:59 |
+---------+---------------------+
<strong>输出:</strong>
+---------+---------------------+
| user_id | last_stamp |
+---------+---------------------+
| 6 | 2020-06-30 15:06:07 |
| 8 | 2020-12-30 00:46:50 |
| 2 | 2020-01-16 02:49:50 |
+---------+---------------------+
<strong>解释:</strong>
6号用户登录了3次但是在2020年仅有一次所以结果集应包含此次登录。
8号用户在2020年登录了2次一次在2月一次在12月所以结果集应该包含12月的这次登录。
2号用户登录了2次但是在2020年仅有一次所以结果集应包含此次登录。
14号用户在2020年没有登录所以结果集不应包含。</pre>

View File

@@ -0,0 +1,50 @@
<p>给定一个长度为4的整数数组&nbsp;<code>cards</code>&nbsp;。你有 <code>4</code> 张卡片,每张卡片上都包含一个范围在 <code>[1,9]</code> 的数字。您应该使用运算符&nbsp;<code>['+', '-', '*', '/']</code>&nbsp;和括号&nbsp;<code>'('</code>&nbsp;&nbsp;<code>')'</code>&nbsp;将这些卡片上的数字排列成数学表达式以获得值24。</p>
<p>你须遵守以下规则:</p>
<ul>
<li>除法运算符 <code>'/'</code> 表示实数除法,而不是整数除法。
<ul>
<li>例如,&nbsp;<code>4 /(1 - 2 / 3)= 4 /(1 / 3)= 12</code>&nbsp;</li>
</ul>
</li>
<li>每个运算都在两个数字之间。特别是,不能使用 <code>“-”</code> 作为一元运算符。
<ul>
<li>例如,如果 <code>cards =[1,1,1,1]</code> ,则表达式 <code>“-1 -1 -1 -1”</code><strong>不允许</strong> 的。</li>
</ul>
</li>
<li>你不能把数字串在一起
<ul>
<li>例如,如果 <code>cards =[1,2,1,2]</code> ,则表达式 <code>“12 + 12”</code> 无效。</li>
</ul>
</li>
</ul>
<p>如果可以得到这样的表达式,其计算结果为 <code>24</code> ,则返回 <code>true </code>,否则返回 <code>false</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong> cards = [4, 1, 8, 7]
<strong>输出:</strong> true
<strong>解释:</strong> (8-4) * (7-1) = 24
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong> cards = [1, 2, 1, 2]
<strong>输出:</strong> false
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>cards.length == 4</code></li>
<li><code>1 &lt;= cards[i] &lt;= 9</code></li>
</ul>

View File

@@ -0,0 +1,13 @@
<p>编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。</p>
<p><strong>示例:</strong></p>
<pre><strong>输入: </strong>25
<strong>输出: </strong>9
<strong>解释: </strong>(2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)</pre>
<p>提示:</p>
<ul>
<li><code>n &lt;= 10^9</code></li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给定一个整数,写一个函数来判断它是否是 3&nbsp;的幂次方。如果是,返回 <code>true</code> ;否则,返回 <code>false</code></p>
<p>整数 <code>n</code> 是 3 的幂次方需满足:存在整数 <code>x</code> 使得 <code>n == 3<sup>x</sup></code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>n = 27
<strong>输出:</strong>true
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 0
<strong>输出:</strong>false
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>n = 9
<strong>输出:</strong>true
</pre>
<p><strong>示例 4</strong></p>
<pre>
<strong>输入:</strong>n = 45
<strong>输出:</strong>false
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>-2<sup>31</sup> &lt;= n &lt;= 2<sup>31</sup> - 1</code></li>
</ul>
<p>&nbsp;</p>
<p><strong>进阶:</strong>你能不使用循环或者递归来完成本题吗?</p>

View File

@@ -0,0 +1,44 @@
<p>给你一个披萨,它由 3n 块不同大小的部分组成,现在你和你的朋友们需要按照如下规则来分披萨:</p>
<ul>
<li>你挑选 <strong>任意</strong>&nbsp;一块披萨。</li>
<li>Alice 将会挑选你所选择的披萨逆时针方向的下一块披萨。</li>
<li>Bob 将会挑选你所选择的披萨顺时针方向的下一块披萨。</li>
<li>重复上述过程直到没有披萨剩下。</li>
</ul>
<p>每一块披萨的大小按顺时针方向由循环数组 <code>slices</code>&nbsp;表示。</p>
<p>请你返回你可以获得的披萨大小总和的最大值。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2020/03/21/sample_3_1723.png" style="height: 240px; width: 475px;" /></p>
<pre>
<strong>输入:</strong>slices = [1,2,3,4,5,6]
<strong>输出:</strong>10
<strong>解释:</strong>选择大小为 4 的披萨Alice 和 Bob 分别挑选大小为 3 和 5 的披萨。然后你选择大小为 6 的披萨Alice 和 Bob 分别挑选大小为 2 和 1 的披萨。你获得的披萨总大小为 4 + 6 = 10 。
</pre>
<p><strong>示例 2</strong></p>
<p><strong><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2020/03/21/sample_4_1723.png" style="height: 250px; width: 475px;" /></strong></p>
<pre>
<strong>输入:</strong>slices = [8,9,8,6,1,1]
<strong>输出:</strong>16
<strong>解释:</strong>两轮都选大小为 8 的披萨。如果你选择大小为 9 的披萨,你的朋友们就会选择大小为 8 的披萨,这种情况下你的总和不是最大的。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= slices.length &lt;= 500</code></li>
<li><code>slices.length % 3 == 0</code></li>
<li><code>1 &lt;= slices[i] &lt;= 1000</code></li>
</ul>

View File

@@ -0,0 +1,38 @@
<p>给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 <code>true</code> ;否则,返回 <code>false</code></p>
<p>整数 <code>n</code> 是 4 的幂次方需满足:存在整数 <code>x</code> 使得 <code>n == 4<sup>x</sup></code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>n = 16
<strong>输出:</strong>true
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 5
<strong>输出:</strong>false
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>n = 1
<strong>输出:</strong>true
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>-2<sup>31</sup> &lt;= n &lt;= 2<sup>31</sup> - 1</code></li>
</ul>
<p>&nbsp;</p>
<p><strong>进阶:</strong>你能不使用循环或者递归来完成本题吗?</p>

View File

@@ -0,0 +1,40 @@
<p>给你一个仅由数字 6 和 9 组成的正整数&nbsp;<code>num</code></p>
<p>你最多只能翻转一位数字,将 6 变成&nbsp;9或者把&nbsp;9 变成&nbsp;6 。</p>
<p>请返回你可以得到的最大数字。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>num = 9669
<strong>输出:</strong>9969
<strong>解释:</strong>
改变第一位数字可以得到 6669 。
改变第二位数字可以得到 9969 。
改变第三位数字可以得到 9699 。
改变第四位数字可以得到 9666 。
其中最大的数字是 9969 。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>num = 9996
<strong>输出:</strong>9999
<strong>解释:</strong>将最后一位从 6 变到 9其结果 9999 是最大的数。</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>num = 9999
<strong>输出:</strong>9999
<strong>解释:</strong>无需改变就已经是最大的数字了。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= num &lt;= 10^4</code></li>
<li><code>num</code>&nbsp;每一位上的数字都是 6 或者&nbsp;9 。</li>
</ul>

View File

@@ -0,0 +1,19 @@
<p>二叉树数据结构<code>TreeNode</code>可用来表示单向链表(其中<code>left</code>置空,<code>right</code>为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求依然符合二叉搜索树的性质,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。</p>
<p>返回转换后的单向链表的头节点。</p>
<p><strong>注意:</strong>本题相对原题稍作改动</p>
<p>&nbsp;</p>
<p><strong>示例:</strong></p>
<pre><strong>输入:</strong> [4,2,5,1,3,null,6,0]
<strong>输出:</strong> [0,null,1,null,2,null,3,null,4,null,5,null,6]
</pre>
<p><strong>提示:</strong></p>
<ul>
<li>节点数量不会超过 100000。</li>
</ul>

View File

@@ -0,0 +1,31 @@
<p>给出第一个词&nbsp;<code>first</code> 和第二个词&nbsp;<code>second</code>,考虑在某些文本&nbsp;<code>text</code>&nbsp;中可能以 <code>"first second third"</code> 形式出现的情况,其中&nbsp;<code>second</code>&nbsp;紧随&nbsp;<code>first</code>&nbsp;出现,<code>third</code>&nbsp;紧随&nbsp;<code>second</code>&nbsp;出现。</p>
<p>对于每种这样的情况,将第三个词 "<code>third</code>" 添加到答案中,并返回答案。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>text = "alice is a good girl she is a good student", first = "a", second = "good"
<strong>输出:</strong>["girl","student"]
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>text = "we will we will rock you", first = "we", second = "will"
<strong>输出:</strong>["we","rock"]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= text.length &lt;= 1000</code></li>
<li><code>text</code>&nbsp;由小写英文字母和空格组成</li>
<li><code>text</code> 中的所有单词之间都由 <strong>单个空格字符</strong> 分隔</li>
<li><code>1 &lt;= first.length, second.length &lt;= 10</code></li>
<li><code>first</code>&nbsp;<code>second</code>&nbsp;由小写英文字母组成</li>
</ul>

View File

@@ -0,0 +1,48 @@
<p>给定一个长度为 <code>n</code> 的字符串 <code>s</code> ,其中 <code>s[i]</code> 是:</p>
<ul>
<li><code>“D”</code> 意味着减少,或者</li>
<li><code>“I”</code> 意味着增加</li>
</ul>
<p><strong>有效排列</strong>&nbsp;是对有&nbsp;<code>n + 1</code>&nbsp;个在&nbsp;<code>[0, n]</code>&nbsp; 范围内的整数的一个排列&nbsp;<code>perm</code>&nbsp;,使得对所有的&nbsp;<code>i</code></p>
<ul>
<li>如果 <code>s[i] == 'D'</code>,那么&nbsp;<code>perm[i] &gt; perm[i+1]</code>,以及;</li>
<li>如果 <code>s[i] == 'I'</code>,那么 <code>perm[i] &lt; perm[i+1]</code></li>
</ul>
<p>返回 <em><strong>有效排列 </strong>&nbsp;</em><code>perm</code><em>的数量 </em>。因为答案可能很大,所以请<strong>返回你的答案对</strong>&nbsp;<code>10<sup>9</sup>&nbsp;+ 7</code><strong>&nbsp;取余</strong></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>s = "DID"
<strong>输出:</strong>5
<strong>解释:</strong>
(0, 1, 2, 3) 的五个有效排列是:
(1, 0, 3, 2)
(2, 0, 3, 1)
(2, 1, 3, 0)
(3, 0, 2, 1)
(3, 1, 2, 0)
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong> s = "D"
<strong>输出:</strong> 1
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == s.length</code></li>
<li><code>1 &lt;= n &lt;= 200</code></li>
<li><code>s[i]</code>&nbsp;不是&nbsp;<code>'I'</code>&nbsp;就是&nbsp;<code>'D'</code></li>
</ul>

View File

@@ -0,0 +1,56 @@
<p>Dota2 的世界里有两个阵营:<code>Radiant</code>(天辉)和 <code>Dire</code>(夜魇)</p>
<p>Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的<code><strong></strong></code>项:</p>
<ol>
<li>
<p><code>禁止一名参议员的权利</code></p>
<p>参议员可以让另一位参议员在这一轮和随后的几轮中丧失<strong>所有的权利</strong></p>
</li>
<li>
<p><code>宣布胜利</code></p>
</li>
</ol>
<p>          如果参议员发现有权利投票的参议员都是<strong>同一个阵营的</strong>,他可以宣布胜利并决定在游戏中的有关变化。</p>
<p> </p>
<p>给定一个字符串代表每个参议员的阵营。字母 “R” 和 “D” 分别代表了 <code>Radiant</code>(天辉)和 <code>Dire</code>(夜魇)。然后,如果有 <code>n</code> 个参议员,给定字符串的大小将是 <code>n</code></p>
<p>以轮为基础的过程从给定顺序的第一个参议员开始到最后一个参议员结束。这一过程将持续到投票结束。所有失去权利的参议员将在过程中被跳过。</p>
<p>假设每一位参议员都足够聪明,会为自己的政党做出最好的策略,你需要预测哪一方最终会宣布胜利并在 Dota2 游戏中决定改变。输出应该是 <code>Radiant</code> 或 <code>Dire</code></p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>"RD"
<strong>输出:</strong>"Radiant"
<strong>解释:</strong><code>第一个参议员来自 Radiant 阵营并且他可以使用第一项权利让第二个参议员失去权力,因此第二个参议员将被跳过因为他没有任何权利。然后在第二轮的时候,第一个参议员可以宣布胜利,因为他是唯一一个有投票权的人</code>
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>"RDD"
<strong>输出:</strong>"Dire"
<strong>解释:</strong>
第一轮中,第一个<code>来自 Radiant 阵营的</code>参议员可以使用第一项权利禁止第二个参议员的权利
第二个<code>来自 Dire 阵营的</code>参议员会被跳过因为他的权利被禁止
第三个<code>来自 Dire 阵营的</code>参议员可以使用他的第一项权利禁止第一个参议员的权利
因此在第二轮只剩下第三个参议员拥有投票的权利,于是他可以宣布胜利
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li>给定字符串的长度在 <code>[1, 10,000]</code> 之间.</li>
</ul>
<p> </p>

View File

@@ -0,0 +1,52 @@
<p>Excel 表中的一个单元格 <code>(r, c)</code> 会以字符串 <code>"&lt;col&gt;&lt;row&gt;"</code> 的形式进行表示,其中:</p>
<ul>
<li><code>&lt;col&gt;</code> 即单元格的列号 <code>c</code> 。用英文字母表中的 <strong>字母</strong> 标识。
<ul>
<li>例如,第 <code>1</code> 列用 <code>'A'</code> 表示,第 <code>2</code> 列用 <code>'B'</code> 表示,第 <code>3</code> 列用 <code>'C'</code> 表示,以此类推。</li>
</ul>
</li>
<li><code>&lt;row&gt;</code> 即单元格的行号 <code>r</code> 。第 <code>r</code> 行就用 <strong>整数</strong> <code>r</code> 标识。</li>
</ul>
<p>给你一个格式为 <code>"&lt;col1&gt;&lt;row1&gt;:&lt;col2&gt;&lt;row2&gt;"</code> 的字符串 <code>s</code> ,其中 <code>&lt;col1&gt;</code> 表示 <code>c1</code> 列,<code>&lt;row1&gt;</code> 表示 <code>r1</code> 行,<code>&lt;col2&gt;</code> 表示 <code>c2</code> 列,<code>&lt;row2&gt;</code> 表示 <code>r2</code> 行,并满足 <code>r1 &lt;= r2</code><code>c1 &lt;= c2</code></p>
<p>找出所有满足&nbsp;<code>r1 &lt;= x &lt;= r2</code><code>c1 &lt;= y &lt;= c2</code> 的单元格,并以列表形式返回。单元格应该按前面描述的格式用 <strong>字符串</strong> 表示,并以 <strong>非递减</strong> 顺序排列(先按列排,再按行排)。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/02/08/ex1drawio.png" style="width: 250px; height: 160px;" /></p>
<pre>
<strong>输入:</strong>s = "K1:L2"
<strong>输出:</strong>["K1","K2","L1","L2"]
<strong>解释:</strong>
上图显示了列表中应该出现的单元格。
红色箭头指示单元格的出现顺序。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/02/09/exam2drawio.png" style="width: 500px; height: 50px;" /></p>
<pre>
<strong>输入:</strong>s = "A1:F1"
<strong>输出:</strong>["A1","B1","C1","D1","E1","F1"]
<strong>解释:</strong>
上图显示了列表中应该出现的单元格。
红色箭头指示单元格的出现顺序。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>s.length == 5</code></li>
<li><code>'A' &lt;= s[0] &lt;= s[3] &lt;= 'Z'</code></li>
<li><code>'1' &lt;= s[1] &lt;= s[4] &lt;= '9'</code></li>
<li><code>s</code> 由大写英文字母、数字、和 <code>':'</code> 组成</li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给你一个字符串&nbsp;<code>columnTitle</code> ,表示 Excel 表格中的列名称。返回 <em>该列名称对应的列序号</em>&nbsp;</p>
<p>例如:</p>
<pre>
A -&gt; 1
B -&gt; 2
C -&gt; 3
...
Z -&gt; 26
AA -&gt; 27
AB -&gt; 28
...</pre>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong> columnTitle = "A"
<strong>输出:</strong> 1
</pre>
<p><strong>示例&nbsp;2:</strong></p>
<pre>
<strong>输入: </strong>columnTitle = "AB"
<strong>输出:</strong> 28
</pre>
<p><strong>示例&nbsp;3:</strong></p>
<pre>
<strong>输入: </strong>columnTitle = "ZY"
<strong>输出:</strong> 701</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= columnTitle.length &lt;= 7</code></li>
<li><code>columnTitle</code> 仅由大写英文组成</li>
<li><code>columnTitle</code> 在范围 <code>["A", "FXSHRXW"]</code></li>
</ul>

View File

@@ -0,0 +1,52 @@
<p>给你一个整数 <code>columnNumber</code> ,返回它在 Excel 表中相对应的列名称。</p>
<p>例如:</p>
<pre>
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
</pre>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>columnNumber = 1
<strong>输出:</strong>"A"
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>columnNumber = 28
<strong>输出:</strong>"AB"
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>columnNumber = 701
<strong>输出:</strong>"ZY"
</pre>
<p><strong>示例 4</strong></p>
<pre>
<strong>输入:</strong>columnNumber = 2147483647
<strong>输出:</strong>"FXSHRXW"
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= columnNumber <= 2<sup>31</sup> - 1</code></li>
</ul>

View File

@@ -0,0 +1,38 @@
<p>给你一个整数 <code>n</code> ,找出从 <code>1</code><code>n</code> 各个整数的 Fizz Buzz 表示,并用字符串数组 <code>answer</code><strong>下标从 1 开始</strong>)返回结果,其中:</p>
<ul>
<li><code>answer[i] == "FizzBuzz"</code> 如果 <code>i</code> 同时是 <code>3</code><code>5</code> 的倍数。</li>
<li><code>answer[i] == "Fizz"</code> 如果 <code>i</code><code>3</code> 的倍数。</li>
<li><code>answer[i] == "Buzz"</code> 如果 <code>i</code><code>5</code> 的倍数。</li>
<li><code>answer[i] == i</code> (以字符串形式)如果上述条件全不满足。</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>n = 3
<strong>输出:</strong>["1","2","Fizz"]
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 5
<strong>输出:</strong>["1","2","Fizz","4","Buzz"]
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>n = 15
<strong>输出:</strong>["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 10<sup>4</sup></code></li>
</ul>

View File

@@ -0,0 +1,35 @@
<p>给你一个整数数组 <code>citations</code> ,其中 <code>citations[i]</code> 表示研究者的第 <code>i</code> 篇论文被引用的次数,<code>citations</code> 已经按照 <strong>升序排列 </strong>。计算并返回该研究者的 <strong><code>h</code><em> </em>指数</strong></p>
<p><a href="https://baike.baidu.com/item/h-index/3991452?fr=aladdin" target="_blank">h 指数的定义</a>h 代表“高引用次数”high citations一名科研人员的 h 指数是指他(她)的 <code>n</code> 篇论文中)<strong>总共</strong><code>h</code> 篇论文分别被引用了<strong>至少</strong> <code>h</code> 次。且其余的 <em><code>n - h</code> </em>篇论文每篇被引用次数 <strong>不超过 </strong><em><code>h</code> </em>次。</p>
<p><strong>提示:</strong>如果 <code>h</code><em> </em>有多种可能的值,<strong><code>h</code> 指数 </strong>是其中最大的那个。</p>
<p>请你设计并实现对数时间复杂度的算法解决此问题。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入<code></code></strong><code>citations = [0,1,3,5,6]</code>
<strong>输出:</strong>3
<strong>解释:</strong>给定数组表示研究者总共有 <code>5</code> 篇论文,每篇论文相应的被引用了 0<code>, 1, 3, 5, 6</code> 次。
  由于研究者有 <code>3 </code>篇论文每篇<strong> 至少 </strong>被引用了 <code>3</code> 次,其余两篇论文每篇被引用<strong> 不多于</strong> <code>3</code> 次,所以她的<em> h </em>指数是 <code>3</code></pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>citations = [1,2,100]
<strong>输出:</strong>2
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == citations.length</code></li>
<li><code>1 <= n <= 10<sup>5</sup></code></li>
<li><code>0 <= citations[i] <= 1000</code></li>
<li><code>citations</code><strong>升序排列</strong></li>
</ul>

View File

@@ -0,0 +1,32 @@
<p>给你一个整数数组 <code>citations</code> ,其中 <code>citations[i]</code> 表示研究者的第 <code>i</code> 篇论文被引用的次数。计算并返回该研究者的 <strong><code>h</code><em>&nbsp;</em>指数</strong></p>
<p>根据维基百科上&nbsp;<a href="https://baike.baidu.com/item/h-index/3991452?fr=aladdin" target="_blank">h 指数的定义</a>h 代表“高引用次数”,一名科研人员的 <code>h</code><strong>指数</strong>是指他(她)的 <code>n</code> 篇论文中)<strong>总共</strong><code>h</code> 篇论文分别被引用了<strong>至少</strong> <code>h</code> 次。且其余的 <em><code>n - h</code>&nbsp;</em>篇论文每篇被引用次数&nbsp;<strong>不超过 </strong><em><code>h</code> </em>次。</p>
<p>如果 <code>h</code><em> </em>有多种可能的值,<strong><code>h</code> 指数 </strong>是其中最大的那个。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong><code>citations = [3,0,6,1,5]</code>
<strong>输出:</strong>3
<strong>解释:</strong>给定数组表示研究者总共有 <code>5</code> 篇论文,每篇论文相应的被引用了 <code>3, 0, 6, 1, 5</code> 次。
&nbsp; 由于研究者有 <code>3 </code>篇论文每篇 <strong>至少 </strong>被引用了 <code>3</code> 次,其余两篇论文每篇被引用 <strong>不多于</strong> <code>3</code> 次,所以她的 <em>h </em>指数是 <code>3</code></pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>citations = [1,3,1]
<strong>输出:</strong>1
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == citations.length</code></li>
<li><code>1 &lt;= n &lt;= 5000</code></li>
<li><code>0 &lt;= citations[i] &lt;= 1000</code></li>
</ul>

View File

@@ -0,0 +1,48 @@
<p>现在有两种线程,氧 <code>oxygen</code> 和氢 <code>hydrogen</code>,你的目标是组织这两种线程来产生水分子。</p>
<p>存在一个屏障barrier使得每个线程必须等候直到一个完整水分子能够被产生出来。</p>
<p>氢和氧线程会被分别给予 <code>releaseHydrogen</code><code>releaseOxygen</code> 方法来允许它们突破屏障。</p>
<p>这些线程应该三三成组突破屏障并能立即组合产生一个水分子。</p>
<p>你必须保证产生一个水分子所需线程的结合必须发生在下一个水分子产生之前。</p>
<p>换句话说:</p>
<ul>
<li>如果一个氧线程到达屏障时没有氢线程到达,它必须等候直到两个氢线程到达。</li>
<li>如果一个氢线程到达屏障时没有其它线程到达,它必须等候直到一个氧线程和另一个氢线程到达。</li>
</ul>
<p>书写满足这些限制条件的氢、氧线程同步代码。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入: </strong>water = "HOH"
<strong>输出: </strong>"HHO"
<strong>解释:</strong> "HOH" 和 "OHH" 依然都是有效解。
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入: </strong>water = "OOHHHH"
<strong>输出: </strong>"HHOHHO"
<strong>解释:</strong> "HOHHHO", "OHHHHO", "HHOHOH", "HOHHOH", "OHHHOH", "HHOOHH", "HOHOHH" 和 "OHHOHH" 依然都是有效解。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>3 * n == water.length</code></li>
<li><code>1 &lt;= n &lt;= 20</code></li>
<li><code>water[i] == 'O' or 'H'</code></li>
<li>输入字符串&nbsp;<code>water</code>&nbsp;中的 <font color="#c7254e"><font face="Menlo, Monaco, Consolas, Courier New, monospace"><span style="font-size:12.6px"><span style="background-color:#f9f2f4">'H'</span></span></font></font>&nbsp;总数将会是 <code>2 * n</code></li>
<li>输入字符串&nbsp;<code>water</code>&nbsp;中的 <font color="#c7254e"><font face="Menlo, Monaco, Consolas, Courier New, monospace"><span style="font-size:12.6px"><span style="background-color:#f9f2f4">'O'</span></span></font></font>&nbsp;总数将会是 <code>n</code></li>
</ul>

View File

@@ -0,0 +1,61 @@
<p>「HTML&nbsp;实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。</p>
<p>HTML 里这些特殊字符和它们对应的字符实体包括:</p>
<ul>
<li><strong>双引号:</strong>字符实体为&nbsp;<code>&amp;quot;</code>&nbsp;,对应的字符是&nbsp;<code>&quot;</code>&nbsp;</li>
<li><strong>单引号:</strong>字符实体为&nbsp;<code>&amp;apos;</code>&nbsp;,对应的字符是&nbsp;<code>&#39;</code>&nbsp;</li>
<li><strong>与符号:</strong>字符实体为&nbsp;<code>&amp;amp;</code>&nbsp;,对应对的字符是&nbsp;<code>&amp;</code>&nbsp;</li>
<li><strong>大于号:</strong>字符实体为&nbsp;<code>&amp;gt;</code>&nbsp;,对应的字符是&nbsp;<code>&gt;</code>&nbsp;</li>
<li><strong>小于号:</strong>字符实体为&nbsp;<code>&amp;lt;</code>&nbsp;,对应的字符是&nbsp;<code>&lt;</code>&nbsp;</li>
<li><strong>斜线号:</strong>字符实体为&nbsp;<code>&amp;frasl;</code>&nbsp;,对应的字符是&nbsp;<code>/</code>&nbsp;</li>
</ul>
<p>给你输入字符串&nbsp;<code>text</code>&nbsp;,请你实现一个 HTML&nbsp;实体解析器,返回解析器解析后的结果。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>text = &quot;&amp;amp; is an HTML entity but &amp;ambassador; is not.&quot;
<strong>输出:</strong>&quot;&amp; is an HTML entity but &amp;ambassador; is not.&quot;
<strong>解释:</strong>解析器把字符实体 &amp;amp; 用 &amp; 替换
</pre>
<p><strong>示例&nbsp;2</strong></p>
<pre>
<strong>输入:</strong>text = &quot;and I quote: &amp;quot;...&amp;quot;&quot;
<strong>输出:</strong>&quot;and I quote: \&quot;...\&quot;&quot;
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>text = &quot;Stay home! Practice on Leetcode :)&quot;
<strong>输出:</strong>&quot;Stay home! Practice on Leetcode :)&quot;
</pre>
<p><strong>示例 4</strong></p>
<pre>
<strong>输入:</strong>text = &quot;x &amp;gt; y &amp;amp;&amp;amp; x &amp;lt; y is always false&quot;
<strong>输出:</strong>&quot;x &gt; y &amp;&amp; x &lt; y is always false&quot;
</pre>
<p><strong>示例 5</strong></p>
<pre>
<strong>输入:</strong>text = &quot;leetcode.com&amp;frasl;problemset&amp;frasl;all&quot;
<strong>输出:</strong>&quot;leetcode.com/problemset/all&quot;
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= text.length &lt;= 10^5</code></li>
<li>字符串可能包含 256 个ASCII 字符中的任意字符。</li>
</ul>

View File

@@ -0,0 +1,25 @@
<p>给你一个有效的 <a href="https://baike.baidu.com/item/IPv4" target="_blank">IPv4</a> 地址&nbsp;<code>address</code>,返回这个 IP 地址的无效化版本。</p>
<p>所谓无效化&nbsp;IP 地址,其实就是用&nbsp;<code>&quot;[.]&quot;</code>&nbsp;代替了每个 <code>&quot;.&quot;</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>address = &quot;1.1.1.1&quot;
<strong>输出:</strong>&quot;1[.]1[.]1[.]1&quot;
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>address = &quot;255.100.50.0&quot;
<strong>输出:</strong>&quot;255[.]100[.]50[.]0&quot;
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li>给出的&nbsp;<code>address</code>&nbsp;是一个有效的 IPv4 地址</li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>假设 力扣LeetCode即将开始 <strong>IPO</strong> 。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 <code>k</code> 个不同的项目。帮助 力扣 设计完成最多 <code>k</code> 个不同项目后得到最大总资本的方式。</p>
<p>给你 <code>n</code> 个项目。对于每个项目 <code>i</code><strong> </strong>,它都有一个纯利润 <code>profits[i]</code> ,和启动该项目需要的最小资本 <code>capital[i]</code></p>
<p>最初,你的资本为 <code>w</code> 。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。</p>
<p>总而言之,从给定项目中选择 <strong>最多</strong> <code>k</code> 个不同项目的列表,以 <strong>最大化最终资本</strong> ,并输出最终可获得的最多资本。</p>
<p>答案保证在 32 位有符号整数范围内。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>k = 2, w = 0, profits = [1,2,3], capital = [0,1,1]
<strong>输出:</strong>4
<strong>解释:
</strong>由于你的初始资本为 0你仅可以从 0 号项目开始。
在完成后,你将获得 1 的利润,你的总资本将变为 1。
此时你可以选择开始 1 号或 2 号项目。
由于你最多可以选择两个项目,所以你需要完成 2 号项目以获得最大的资本。
因此,输出最后最大化的资本,为 0 + 1 + 3 = 4。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>k = 3, w = 0, profits = [1,2,3], capital = [0,1,2]
<strong>输出:</strong>6
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= k &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= w &lt;= 10<sup>9</sup></code></li>
<li><code>n == profits.length</code></li>
<li><code>n == capital.length</code></li>
<li><code>1 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= profits[i] &lt;= 10<sup>4</sup></code></li>
<li><code>0 &lt;= capital[i] &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,54 @@
<p>给你一个链表,每 <em>k </em>个节点一组进行翻转,请你返回翻转后的链表。</p>
<p><em>k </em>是一个正整数,它的值小于或等于链表的长度。</p>
<p>如果节点总数不是 <em>k </em>的整数倍,那么请将最后剩余的节点保持原有顺序。</p>
<p><strong>进阶:</strong></p>
<ul>
<li>你可以设计一个只使用常数额外空间的算法来解决此问题吗?</li>
<li><strong>你不能只是单纯的改变节点内部的值</strong>,而是需要实际进行节点交换。</li>
</ul>
<p> </p>
<p><strong>示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/10/03/reverse_ex1.jpg" style="width: 542px; height: 222px;" />
<pre>
<strong>输入:</strong>head = [1,2,3,4,5], k = 2
<strong>输出:</strong>[2,1,4,3,5]
</pre>
<p><strong>示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/10/03/reverse_ex2.jpg" style="width: 542px; height: 222px;" />
<pre>
<strong>输入:</strong>head = [1,2,3,4,5], k = 3
<strong>输出:</strong>[3,2,1,4,5]
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>head = [1,2,3,4,5], k = 1
<strong>输出:</strong>[1,2,3,4,5]
</pre>
<p><strong>示例 4</strong></p>
<pre>
<strong>输入:</strong>head = [1], k = 1
<strong>输出:</strong>[1]
</pre>
<ul>
</ul>
<p><strong>提示:</strong></p>
<ul>
<li>列表中节点的数量在范围 <code>sz</code></li>
<li><code>1 <= sz <= 5000</code></li>
<li><code>0 <= Node.val <= 1000</code></li>
<li><code>1 <= k <= sz</code></li>
</ul>

View File

@@ -0,0 +1,36 @@
<p>给定一个正整数数组 <code>nums</code>和一个整数 <font color="#c7254e"><font face="Menlo, Monaco, Consolas, Courier New, monospace"><span style="font-size:12.6px"><span style="background-color:#f9f2f4">k</span></span></font></font>&nbsp;,返回 <font color="#c7254e"><font face="Menlo, Monaco, Consolas, Courier New, monospace"><span style="font-size:12.6px"><span style="background-color:#f9f2f4">num</span></span></font></font>&nbsp;中 「<strong>好子数组」</strong><em>&nbsp;</em>的数目。</p>
<p>如果 <code>nums</code>&nbsp;的某个子数组中不同整数的个数恰好为 <code>k</code>,则称 <code>nums</code>&nbsp;的这个连续、不一定不同的子数组为 <strong></strong><strong>好子数组 」</strong></p>
<ul>
<li>例如,<code>[1,2,3,1,2]</code> 中有&nbsp;<code>3</code>&nbsp;个不同的整数:<code>1</code><code>2</code>,以及&nbsp;<code>3</code></li>
</ul>
<p><strong>子数组</strong> 是数组的 <strong>连续</strong> 部分。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,1,2,3], k = 2
<strong>输出:</strong>7
<strong>解释:</strong>恰好由 2 个不同整数组成的子数组:[1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2], [1,2,1,2].
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,1,3,4], k = 3
<strong>输出:</strong>3
<strong>解释:</strong>恰好由 3 个不同整数组成的子数组:[1,2,1,3], [2,1,3], [1,3,4].
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 2 * 10<sup>4</sup></code></li>
<li><code>1 &lt;= nums[i], k &lt;= nums.length</code></li>
</ul>

View File

@@ -0,0 +1,36 @@
<p>给你一个整数数组 <code>nums</code> 和一个整数 <code>k</code></p>
<p>每一步操作中,你需要从数组中选出和为 <code>k</code> 的两个整数,并将它们移出数组。</p>
<p>返回你可以对数组执行的最大操作数。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,3,4], k = 5
<strong>输出:</strong>2
<strong>解释:</strong>开始时 nums = [1,2,3,4]
- 移出 1 和 4 ,之后 nums = [2,3]
- 移出 2 和 3 ,之后 nums = []
不再有和为 5 的数对,因此最多执行 2 次操作。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [3,1,3,4,3], k = 6
<strong>输出:</strong>1
<strong>解释:</strong>开始时 nums = [3,1,3,4,3]
- 移出前两个 3 之后nums = [1,4,3]
不再有和为 6 的数对,因此最多执行 1 次操作。</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= nums.length <= 10<sup>5</sup></code></li>
<li><code>1 <= nums[i] <= 10<sup>9</sup></code></li>
<li><code>1 <= k <= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,41 @@
<p>给定一个整数数组&nbsp;<code>arr</code>&nbsp;和一个整数&nbsp;<code>k</code>&nbsp;,通过重复&nbsp;<code>k</code>&nbsp;次来修改数组。</p>
<p>例如,如果&nbsp;<code>arr = [1, 2]</code>&nbsp;<meta charset="UTF-8" />&nbsp;<code>k = 3</code>&nbsp;,那么修改后的数组将是 <code>[1, 2, 1, 2, 1, 2]</code></p>
<p>返回修改后的数组中的最大的子数组之和。注意,子数组长度可以是 <code>0</code>,在这种情况下它的总和也是 <code>0</code></p>
<p>由于&nbsp;<strong>结果可能会很大</strong>,需要返回的<meta charset="UTF-8" />&nbsp;<code>10<sup>9</sup>&nbsp;+ 7</code>&nbsp;&nbsp;<strong></strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>arr = [1,2], k = 3
<strong>输出:</strong>9
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>arr = [1,-2,1], k = 5
<strong>输出:</strong>2
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>arr = [-1,-2], k = 7
<strong>输出:</strong>0
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<meta charset="UTF-8" />
<ul>
<li><code>1 &lt;= arr.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= k &lt;= 10<sup>5</sup></code></li>
<li><code>-10<sup>4</sup>&nbsp;&lt;= arr[i] &lt;= 10<sup>4</sup></code></li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给你一个整数数组 <code>nums</code> 和一个整数 <code>k</code> ,按以下方法修改该数组:</p>
<ul>
<li>选择某个下标 <code>i</code>&nbsp;并将 <code>nums[i]</code> 替换为 <code>-nums[i]</code></li>
</ul>
<p>重复这个过程恰好 <code>k</code> 次。可以多次选择同一个下标 <code>i</code></p>
<p>以这种方式修改数组后,返回数组 <strong>可能的最大和</strong></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [4,2,3], k = 1
<strong>输出:</strong>5
<strong>解释:</strong>选择下标 1 nums 变为 [4,-2,3] 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [3,-1,0,2], k = 3
<strong>输出:</strong>6
<strong>解释:</strong>选择下标 (1, 2, 2) nums 变为 [3,1,0,2] 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums = [2,-3,-1,5,-4], k = 2
<strong>输出:</strong>13
<strong>解释:</strong>选择下标 (1, 4) nums 变为 [2,3,-1,5,4] 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 10<sup>4</sup></code></li>
<li><code>-100 &lt;= nums[i] &lt;= 100</code></li>
<li><code>1 &lt;= k &lt;= 10<sup>4</sup></code></li>
</ul>

View File

@@ -0,0 +1,47 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>nums</code>&nbsp;,它表示一个 <strong></strong> ,其中 <code>nums[0]</code>&nbsp;是栈顶的元素。</p>
<p>每一次操作中,你可以执行以下操作 <strong>之一</strong>&nbsp;</p>
<ul>
<li>如果栈非空,那么 <strong>删除</strong>&nbsp;栈顶端的元素。</li>
<li>如果存在 1 个或者多个被删除的元素,你可以从它们中选择任何一个,<b>添加</b>&nbsp;回栈顶,这个元素成为新的栈顶元素。</li>
</ul>
<p>同时给你一个整数&nbsp;<code>k</code>&nbsp;,它表示你总共需要执行操作的次数。</p>
<p>请你返回 <strong>恰好</strong>&nbsp;执行 <code>k</code>&nbsp;次操作以后,栈顶元素的 <strong>最大值</strong>&nbsp;。如果执行完 <code>k</code>&nbsp;次操作以后,栈一定为空,请你返回 <code>-1</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>nums = [5,2,2,4,0,6], k = 4
<b>输出:</b>5
<strong>解释:</strong>
4 次操作后,栈顶元素为 5 的方法之一为:
- 第 1 次操作:删除栈顶元素 5 ,栈变为 [2,2,4,0,6] 。
- 第 2 次操作:删除栈顶元素 2 ,栈变为 [2,4,0,6] 。
- 第 3 次操作:删除栈顶元素 2 ,栈变为 [4,0,6] 。
- 第 4 次操作:将 5 添加回栈顶,栈变为 [5,4,0,6] 。
注意,这不是最后栈顶元素为 5 的唯一方式。但可以证明4 次操作以后 5 是能得到的最大栈顶元素。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>nums = [2], k = 1
<b>输出:</b>-1
<b>解释:</b>
第 1 次操作中,我们唯一的选择是将栈顶元素弹出栈。
由于 1 次操作后无法得到一个非空的栈,所以我们返回 -1 。
</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], k &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,50 @@
<p>给你两个字符串&nbsp;<code>s</code>&nbsp;&nbsp;<code>t</code>&nbsp;,你的目标是在 <code>k</code>&nbsp;次操作以内把字符串&nbsp;<code>s</code>&nbsp;转变成&nbsp;<code>t</code>&nbsp;</p>
<p>在第 <code>i</code>&nbsp;次操作时(<code>1 &lt;= i &lt;= k</code>),你可以选择进行如下操作:</p>
<ul>
<li>选择字符串 <code>s</code>&nbsp;中满足 <code>1 &lt;= j &lt;= s.length</code>&nbsp;且之前未被选过的任意下标 <code>j</code>&nbsp;(下标从 1 开始),并将此位置的字符切换 <code>i</code>&nbsp;次。</li>
<li>不进行任何操作。</li>
</ul>
<p>切换 1 个字符的意思是用字母表中该字母的下一个字母替换它(字母表环状接起来,所以 <code>'z'</code>&nbsp;切换后会变成 <code>'a'</code>)。第 <code>i</code>&nbsp;次操作意味着该字符应切换&nbsp;<code>i</code>&nbsp;</p>
<p>请记住任意一个下标 <code>j</code>&nbsp;最多只能被操作&nbsp;1 次。</p>
<p>如果在不超过 <code>k</code>&nbsp;次操作内可以把字符串 <code>s</code>&nbsp;转变成 <code>t</code>&nbsp;,那么请你返回&nbsp;<code>true</code>&nbsp;,否则请你返回&nbsp;<code>false</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>s = "input", t = "ouput", k = 9
<strong>输出:</strong>true
<strong>解释:</strong>第 6 次操作时,我们将 'i' 切换 6 次得到 'o' 。第 7 次操作时,我们将 'n' 切换 7 次得到 'u' 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>s = "abc", t = "bcd", k = 10
<strong>输出:</strong>false
<strong>解释:</strong>我们需要将每个字符切换 1 次才能得到 t 。我们可以在第 1 次操作时将 'a' 切换成 'b' ,但另外 2 个字母在剩余操作中无法再转变为 t 中对应字母。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>s = "aab", t = "bbb", k = 27
<strong>输出:</strong>true
<strong>解释:</strong>第 1 次操作时,我们将第一个 'a' 切换 1 次得到 'b' 。在第 27 次操作时,我们将第二个字母 'a' 切换 27 次得到 'b' 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length, t.length &lt;= 10^5</code></li>
<li><code>0 &lt;= k &lt;= 10^9</code></li>
<li><code>s</code>&nbsp;&nbsp;<code>t</code>&nbsp;只包含小写英文字母。</li>
</ul>

View File

@@ -0,0 +1,46 @@
<p>你正在设计一个动态数组。给你一个下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>nums</code>&nbsp;,其中&nbsp;<code>nums[i]</code>&nbsp;&nbsp;<code>i</code>&nbsp;时刻数组中的元素数目。除此以外,你还有一个整数 <code>k</code>&nbsp;,表示你可以 <strong>调整</strong>&nbsp;数组大小的 <strong>最多</strong>&nbsp;次数(每次都可以调整成 <strong>任意</strong>&nbsp;大小)。</p>
<p><code>t</code>&nbsp;时刻数组的大小&nbsp;<code>size<sub>t</sub></code>&nbsp;必须大于等于&nbsp;<code>nums[t]</code>&nbsp;,因为数组需要有足够的空间容纳所有元素。<code>t</code>&nbsp;时刻 <strong>浪费的空间</strong>&nbsp;&nbsp;<code>size<sub>t</sub> - nums[t]</code>&nbsp;<strong></strong>&nbsp;浪费空间为满足&nbsp;<code>0 &lt;= t &lt; nums.length</code>&nbsp;的每一个时刻&nbsp;<code>t</code>&nbsp;浪费的空间&nbsp;<strong>之和</strong>&nbsp;</p>
<p>在调整数组大小不超过 <code>k</code>&nbsp;次的前提下,请你返回 <strong>最小总浪费空间</strong>&nbsp;</p>
<p><strong>注意:</strong>数组最开始时可以为&nbsp;<strong>任意大小</strong>&nbsp;,且&nbsp;<strong>不计入</strong>&nbsp;调整大小的操作次数。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>nums = [10,20], k = 0
<b>输出:</b>10
<b>解释:</b>size = [20,20].
我们可以让数组初始大小为 20 。
总浪费空间为 (20 - 10) + (20 - 20) = 10 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>nums = [10,20,30], k = 1
<b>输出:</b>10
<b>解释:</b>size = [20,20,30].
我们可以让数组初始大小为 20 ,然后时刻 2 调整大小为 30 。
总浪费空间为 (20 - 10) + (20 - 20) + (30 - 30) = 10 。
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>nums = [10,20,15,30,20], k = 2
<b>输出:</b>15
<b>解释:</b>size = [10,20,20,30,30].
我们可以让数组初始大小为 10 ,时刻 1 调整大小为 20 ,时刻 3 调整大小为 30 。
总浪费空间为 (10 - 10) + (20 - 20) + (20 - 15) + (30 - 30) + (30 - 20) = 15 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 200</code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>6</sup></code></li>
<li><code>0 &lt;= k &lt;= nums.length - 1</code></li>
</ul>

View File

@@ -0,0 +1,47 @@
<p><code>n</code> 个城市通过一些航班连接。给你一个数组&nbsp;<code>flights</code> ,其中&nbsp;<code>flights[i] = [from<sub>i</sub>, to<sub>i</sub>, price<sub>i</sub>]</code> ,表示该航班都从城市 <code>from<sub>i</sub></code> 开始,以价格 <code>price<sub>i</sub></code> 抵达 <code>to<sub>i</sub></code></p>
<p>现在给定所有的城市和航班,以及出发城市 <code>src</code> 和目的地 <code>dst</code>,你的任务是找到出一条最多经过 <code>k</code>&nbsp;站中转的路线,使得从 <code>src</code><code>dst</code><strong>价格最便宜</strong> ,并返回该价格。 如果不存在这样的路线,则输出 <code>-1</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>
n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]]
src = 0, dst = 2, k = 1
<strong>输出:</strong> 200
<strong>解释:</strong>
城市航班图如下
<img alt="" src="https://s3-lc-upload.s3.amazonaws.com/uploads/2018/02/16/995.png" style="height: 180px; width: 246px;" />
从城市 0 到城市 2 在 1 站中转以内的最便宜价格是 200如图中红色所示。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>
n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]]
src = 0, dst = 2, k = 0
<strong>输出:</strong> 500
<strong>解释:</strong>
城市航班图如下
<img alt="" src="https://s3-lc-upload.s3.amazonaws.com/uploads/2018/02/16/995.png" style="height: 180px; width: 246px;" />
从城市 0 到城市 2 在 0 站中转以内的最便宜价格是 500如图中蓝色所示。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 100</code></li>
<li><code>0 &lt;= flights.length &lt;= (n * (n - 1) / 2)</code></li>
<li><code>flights[i].length == 3</code></li>
<li><code>0 &lt;= from<sub>i</sub>, to<sub>i</sub> &lt; n</code></li>
<li><code>from<sub>i</sub> != to<sub>i</sub></code></li>
<li><code>1 &lt;= price<sub>i</sub> &lt;= 10<sup>4</sup></code></li>
<li>航班没有重复,且不存在自环</li>
<li><code>0 &lt;= src, dst, k &lt; n</code></li>
<li><code>src != dst</code></li>
</ul>

View File

@@ -0,0 +1,30 @@
<p>给你一个整数 <code>n</code><code>10</code> 进制)和一个基数 <code>k</code> ,请你将 <code>n</code><code>10</code> 进制表示转换为 <code>k</code> 进制表示,计算并返回转换后各位数字的 <strong>总和</strong></p>
<p>转换后,各位数字应当视作是 <code>10</code> 进制数字,且它们的总和也应当按 <code>10</code> 进制表示返回。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>n = 34, k = 6
<strong>输出:</strong>9
<strong>解释:</strong>34 (10 进制) 在 6 进制下表示为 54 。5 + 4 = 9 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 10, k = 10
<strong>输出:</strong>1
<strong>解释:</strong>n 本身就是 10 进制。 1 + 0 = 1 。
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= n <= 100</code></li>
<li><code>2 <= k <= 10</code></li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给定一个二进制数组 <code>nums</code> 和一个整数 <code>k</code></p>
<p><strong>k位翻转</strong> 就是从 <code>nums</code> 中选择一个长度为 <code>k</code><strong>子数组</strong> ,同时把子数组中的每一个 <code>0</code> 都改成 <code>1</code> ,把子数组中的每一个 <code>1</code> 都改成 <code>0</code></p>
<p>返回数组中不存在 <code>0</code> 所需的最小 <strong>k位翻转</strong> 次数。如果不可能,则返回&nbsp;<code>-1</code>&nbsp;</p>
<p><strong>子数组</strong> 是数组的 <strong>连续</strong> 部分。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [0,1,0], K = 1
<strong>输出:</strong>2
<strong>解释:</strong>先翻转 A[0],然后翻转 A[2]。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [1,1,0], K = 2
<strong>输出:</strong>-1
<strong>解释:</strong>无论我们怎样翻转大小为 2 的子数组,我们都不能使数组变为 [1,1,1]。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums = [0,0,0,1,0,1,1,0], K = 3
<strong>输出:</strong>3
<strong>解释:</strong>
翻转 A[0],A[1],A[2]:&nbsp;A变成 [1,1,1,1,0,1,1,0]
翻转 A[4],A[5],A[6]:&nbsp;A变成 [1,1,1,1,1,0,0,0]
翻转 A[5],A[6],A[7]:&nbsp;A变成 [1,1,1,1,1,1,1,1]
</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;= k &lt;= nums.length</code></li>
</ul>

View File

@@ -0,0 +1,29 @@
<p>给出两个整数&nbsp;<code>n</code>&nbsp;&nbsp;<code>k</code>,找出所有包含从&nbsp;<code>1</code>&nbsp;&nbsp;<code>n</code>&nbsp;的数字,且恰好拥有&nbsp;<code>k</code>&nbsp;个逆序对的不同的数组的个数。</p>
<p>逆序对的定义如下:对于数组的第<code>i</code>个和第&nbsp;<code>j</code>个元素,如果满<code>i</code>&nbsp;&lt;&nbsp;<code>j</code>&nbsp;<code>a[i]</code>&nbsp;&gt;&nbsp;<code>a[j]</code>,则其为一个逆序对;否则不是。</p>
<p>由于答案可能很大,只需要返回 答案 mod 10<sup>9</sup>&nbsp;+ 7 的值。</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong> n = 3, k = 0
<strong>输出:</strong> 1
<strong>解释:</strong>
只有数组 [1,2,3] 包含了从1到3的整数并且正好拥有 0 个逆序对。
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong> n = 3, k = 1
<strong>输出:</strong> 2
<strong>解释:</strong>
数组 [1,3,2] 和 [2,1,3] 都有 1 个逆序对。
</pre>
<p><strong>说明:</strong></p>
<ol>
<li>&nbsp;<code>n</code>&nbsp;的范围是 [1, 1000] 并且 <code>k</code> 的范围是 [0, 1000]。</li>
</ol>

View File

@@ -0,0 +1,58 @@
<p>请你为 <a href="https://baike.baidu.com/item/%E7%BC%93%E5%AD%98%E7%AE%97%E6%B3%95">最不经常使用LFU</a>缓存算法设计并实现数据结构。</p>
<p>实现 <code>LFUCache</code> 类:</p>
<ul>
<li><code>LFUCache(int capacity)</code> - 用数据结构的容量&nbsp;<code>capacity</code> 初始化对象</li>
<li><code>int get(int key)</code>&nbsp;- 如果键&nbsp;<code>key</code> 存在于缓存中,则获取键的值,否则返回 <code>-1</code></li>
<li><code>void put(int key, int value)</code>&nbsp;- 如果键&nbsp;<code>key</code> 已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量&nbsp;<code>capacity</code> 时,则应该在插入新项之前,移除最不经常使用的项。在此问题中,当存在平局(即两个或更多个键具有相同使用频率)时,应该去除 <strong>最近最久未使用</strong> 的键。</li>
</ul>
<p>为了确定最不常使用的键,可以为缓存中的每个键维护一个 <strong>使用计数器</strong> 。使用计数最小的键是最久未使用的键。</p>
<p>当一个键首次插入到缓存中时,它的使用计数器被设置为 <code>1</code> (由于 put 操作)。对缓存中的键执行 <code>get</code><code>put</code> 操作,使用计数器的值将会递增。</p>
<p>函数 <code>get</code><code>put</code> 必须以 <code>O(1)</code> 的平均时间复杂度运行。</p>
<p>&nbsp;</p>
<p><strong>示例:</strong></p>
<pre>
<strong>输入:</strong>
["LFUCache", "put", "put", "get", "put", "get", "get", "put", "get", "get", "get"]
[[2], [1, 1], [2, 2], [1], [3, 3], [2], [3], [4, 4], [1], [3], [4]]
<strong>输出:</strong>
[null, null, null, 1, null, -1, 3, null, -1, 3, 4]
<strong>解释:</strong>
// cnt(x) = 键 x 的使用计数
// cache=[] 将显示最后一次使用的顺序(最左边的元素是最近的)
LFUCache lfu = new LFUCache(2);
lfu.put(1, 1); // cache=[1,_], cnt(1)=1
lfu.put(2, 2); // cache=[2,1], cnt(2)=1, cnt(1)=1
lfu.get(1); // 返回 1
// cache=[1,2], cnt(2)=1, cnt(1)=2
lfu.put(3, 3); // 去除键 2 ,因为 cnt(2)=1 ,使用计数最小
// cache=[3,1], cnt(3)=1, cnt(1)=2
lfu.get(2); // 返回 -1未找到
lfu.get(3); // 返回 3
// cache=[3,1], cnt(3)=2, cnt(1)=2
lfu.put(4, 4); // 去除键 1 1 和 3 的 cnt 相同,但 1 最久未使用
// cache=[4,3], cnt(4)=1, cnt(3)=2
lfu.get(1); // 返回 -1未找到
lfu.get(3); // 返回 3
// cache=[3,4], cnt(4)=1, cnt(3)=3
lfu.get(4); // 返回 4
// cache=[3,4], cnt(4)=2, cnt(3)=3</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>0 &lt;= capacity&nbsp;&lt;= 10<sup>4</sup></code></li>
<li><code>0 &lt;= key &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= value &lt;= 10<sup>9</sup></code></li>
<li>最多调用 <code>2 * 10<sup>5</sup></code><code>get</code><code>put</code> 方法</li>
</ul>

View File

@@ -0,0 +1,21 @@
<p>设计和构建一个&ldquo;最近最少使用&rdquo;缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。</p>
<p>它应该支持以下操作: 获取数据 <code>get</code> 和 写入数据 <code>put</code></p>
<p>获取数据 <code>get(key)</code> - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。<br>
写入数据 <code>put(key, value)</code> - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。</p>
<p><strong>示例:</strong></p>
<pre>LRUCache cache = new LRUCache( 2 /* 缓存容量 */ );
cache.put(1, 1);
cache.put(2, 2);
cache.get(1); // 返回 1
cache.put(3, 3); // 该操作会使得密钥 2 作废
cache.get(2); // 返回 -1 (未找到)
cache.put(4, 4); // 该操作会使得密钥 1 作废
cache.get(1); // 返回 -1 (未找到)
cache.get(3); // 返回 3
cache.get(4); // 返回 4
</pre>

View File

@@ -0,0 +1,50 @@
<div class="title__3Vvk">请你设计并实现一个满足&nbsp; <a href="https://baike.baidu.com/item/LRU" target="_blank">LRU (最近最少使用) 缓存</a> 约束的数据结构。</div>
<div class="title__3Vvk">实现 <code>LRUCache</code> 类:</div>
<div class="original__bRMd">
<div>
<ul>
<li><code>LRUCache(int capacity)</code><strong>正整数</strong> 作为容量&nbsp;<code>capacity</code> 初始化 LRU 缓存</li>
<li><code>int get(int key)</code> 如果关键字 <code>key</code> 存在于缓存中,则返回关键字的值,否则返回 <code>-1</code></li>
<li><code>void put(int key, int value)</code>&nbsp;如果关键字&nbsp;<code>key</code> 已经存在,则变更其数据值&nbsp;<code>value</code> ;如果不存在,则向缓存中插入该组&nbsp;<code>key-value</code> 。如果插入操作导致关键字数量超过&nbsp;<code>capacity</code> ,则应该 <strong>逐出</strong> 最久未使用的关键字。</li>
</ul>
<p>函数 <code>get</code><code>put</code> 必须以 <code>O(1)</code> 的平均时间复杂度运行。</p>
</div>
</div>
<p>&nbsp;</p>
<p><strong>示例:</strong></p>
<pre>
<strong>输入</strong>
["LRUCache", "put", "put", "get", "put", "get", "put", "get", "get", "get"]
[[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]]
<strong>输出</strong>
[null, null, null, 1, null, -1, null, -1, 3, 4]
<strong>解释</strong>
LRUCache lRUCache = new LRUCache(2);
lRUCache.put(1, 1); // 缓存是 {1=1}
lRUCache.put(2, 2); // 缓存是 {1=1, 2=2}
lRUCache.get(1); // 返回 1
lRUCache.put(3, 3); // 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}
lRUCache.get(2); // 返回 -1 (未找到)
lRUCache.put(4, 4); // 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}
lRUCache.get(1); // 返回 -1 (未找到)
lRUCache.get(3); // 返回 3
lRUCache.get(4); // 返回 4
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= capacity &lt;= 3000</code></li>
<li><code>0 &lt;= key &lt;= 10000</code></li>
<li><code>0 &lt;= value &lt;= 10<sup>5</sup></code></li>
<li>最多调用 <code>2 * 10<sup>5</sup></code><code>get</code><code>put</code></li>
</ul>

View File

@@ -0,0 +1,54 @@
<p>给你一个类似 Lisp 语句的字符串表达式 <code>expression</code>,求出其计算结果。</p>
<p>表达式语法如下所示:</p>
<ul>
<li>表达式可以为整数,<strong>let</strong> 表达式,<strong>add</strong> 表达式,<strong>mult</strong> 表达式,或赋值的变量。表达式的结果总是一个整数。</li>
<li>(整数可以是正整数、负整数、0)</li>
<li><strong>let</strong> 表达式采用&nbsp;<code>"(let v<sub>1</sub> e<sub>1</sub> v<sub>2</sub> e<sub>2</sub> ... v<sub>n</sub> e<sub>n</sub> expr)"</code> 的形式,其中&nbsp;<code>let</code> 总是以字符串&nbsp;<code>"let"</code>来表示,接下来会跟随一对或多对交替的变量和表达式,也就是说,第一个变量&nbsp;<code>v<sub>1</sub></code>被分配为表达式&nbsp;<code>e<sub>1</sub></code>&nbsp;的值,第二个变量&nbsp;<code>v<sub>2</sub></code>&nbsp;被分配为表达式&nbsp;<code>e<sub>2</sub></code>&nbsp;的值,<strong>依次类推</strong>;最终 <code>let</code> 表达式的值为&nbsp;<code>expr</code>表达式的值。</li>
<li><strong>add </strong>表达式表示为&nbsp;<code>"(add e<sub>1</sub> e<sub>2</sub>)"</code> ,其中&nbsp;<code>add</code> 总是以字符串&nbsp;<code>"add"</code> 来表示,该表达式总是包含两个表达式 <code>e<sub>1</sub></code><code>e<sub>2</sub></code> ,最终结果是&nbsp;<code>e<sub>1</sub></code> 表达式的值与&nbsp;<code>e<sub>2</sub></code>&nbsp;表达式的值之 <strong></strong></li>
<li><strong>mult</strong> 表达式表示为&nbsp;<code>"(mult e<sub>1</sub> e<sub>2</sub>)"</code>&nbsp;,其中&nbsp;<code>mult</code> 总是以字符串 <code>"mult"</code> 表示,该表达式总是包含两个表达式 <code>e<sub>1</sub></code><code>e<sub>2</sub></code>,最终结果是&nbsp;<code>e<sub>1</sub></code> 表达式的值与&nbsp;<code>e<sub>2</sub></code>&nbsp;表达式的值之<strong></strong></li>
<li>在该题目中,变量名以小写字符开始,之后跟随 0 个或多个小写字符或数字。为了方便,<code>"add"</code> <code>"let"</code> <code>"mult"</code> 会被定义为 "关键字" ,不会用作变量名。</li>
<li>最后,要说一下作用域的概念。计算变量名所对应的表达式时,在计算上下文中,首先检查最内层作用域(按括号计),然后按顺序依次检查外部作用域。测试用例中每一个表达式都是合法的。有关作用域的更多详细信息,请参阅示例。</li>
</ul>
&nbsp;
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>expression = "(let x 2 (mult x (let x 3 y 4 (add x y))))"
<strong>输出:</strong>14
<strong>解释:</strong>
计算表达式 (add x y), 在检查变量 x 值时,
在变量的上下文中由最内层作用域依次向外检查。
首先找到 x = 3, 所以此处的 x 值是 3 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>expression = "(let x 3 x 2 x)"
<strong>输出:</strong>2
<strong>解释:</strong>let 语句中的赋值运算按顺序处理即可。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>expression = "(let x 1 y 2 x (add x y) (add x y))"
<strong>输出:</strong>5
<strong>解释:</strong>
第一个 (add x y) 计算结果是 3并且将此值赋给了 x 。
第二个 (add x y) 计算结果是 3 + 2 = 5 。
</pre>
&nbsp;
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= expression.length &lt;= 2000</code></li>
<li><code>exprssion</code> 中不含前导和尾随空格</li>
<li><code>expressoin</code> 中的不同部分token之间用单个空格进行分隔</li>
<li>答案和所有中间计算结果都符合 <strong>32-bit</strong> 整数范围</li>
<li>测试用例中的表达式均为合法的且最终结果为整数</li>
</ul>

View File

@@ -0,0 +1,36 @@
<p>给定一个 n&nbsp;叉树的根节点 <meta charset="UTF-8" />&nbsp;<code>root</code>&nbsp;,返回 <em>其节点值的<strong> 前序遍历</strong></em></p>
<p>n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 <code>null</code> 分隔(请参见示例)。</p>
<p><br />
<strong>示例 1</strong></p>
<p><img src="https://assets.leetcode.com/uploads/2018/10/12/narytreeexample.png" style="height: 193px; width: 300px;" /></p>
<pre>
<strong>输入:</strong>root = [1,null,3,2,4,null,5,6]
<strong>输出:</strong>[1,3,5,6,2,4]
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2019/11/08/sample_4_964.png" style="height: 272px; width: 300px;" /></p>
<pre>
<strong>输入:</strong>root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
<strong>输出:</strong>[1,2,3,6,7,11,14,4,8,12,5,9,13,10]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li>节点总数在范围<meta charset="UTF-8" />&nbsp;<code>[0, 10<sup>4</sup>]</code></li>
<li><code>0 &lt;= Node.val &lt;= 10<sup>4</sup></code></li>
<li>n 叉树的高度小于或等于 <code>1000</code></li>
</ul>
<p>&nbsp;</p>
<p><strong>进阶:</strong>递归法很简单,你可以使用迭代法完成此题吗?</p>

View File

@@ -0,0 +1,37 @@
<p>给定一个 n&nbsp;叉树的根节点<meta charset="UTF-8" />&nbsp;<code>root</code>&nbsp;,返回 <em>其节点值的<strong> 后序遍历</strong></em></p>
<p>n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 <code>null</code> 分隔(请参见示例)。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img src="https://assets.leetcode.com/uploads/2018/10/12/narytreeexample.png" style="height: 193px; width: 300px;" /></p>
<pre>
<strong>输入:</strong>root = [1,null,3,2,4,null,5,6]
<strong>输出:</strong>[5,6,3,2,4,1]
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2019/11/08/sample_4_964.png" style="height: 269px; width: 296px;" /></p>
<pre>
<strong>输入:</strong>root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
<strong>输出:</strong>[2,6,14,11,7,3,12,8,4,13,9,10,5,1]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li>节点总数在范围 <code>[0, 10<sup>4</sup>]</code></li>
<li><code>0 &lt;= Node.val &lt;= 10<sup>4</sup></code></li>
<li>n 叉树的高度小于或等于 <code>1000</code></li>
</ul>
<p>&nbsp;</p>
<p><strong>进阶:</strong>递归法很简单,你可以使用迭代法完成此题吗?</p>

View File

@@ -0,0 +1,32 @@
<p>给定一个 N 叉树,返回其节点值的<em>层序遍历</em>。(即从左到右,逐层遍历)。</p>
<p>树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<p><img src="https://assets.leetcode.com/uploads/2018/10/12/narytreeexample.png" style="width: 100%; max-width: 300px;" /></p>
<pre>
<strong>输入:</strong>root = [1,null,3,2,4,null,5,6]
<strong>输出:</strong>[[1],[3,2,4],[5,6]]
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2019/11/08/sample_4_964.png" style="width: 296px; height: 241px;" /></p>
<pre>
<strong>输入:</strong>root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
<strong>输出:</strong>[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li>树的高度不会超过 <code>1000</code></li>
<li>树的节点总数在 <code>[0, 10^4]</code> 之间</li>
</ul>

View File

@@ -0,0 +1,34 @@
<p>给定一个 N 叉树,找到其最大深度。</p>
<p class="MachineTrans-lang-zh-CN">最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。</p>
<p class="MachineTrans-lang-zh-CN">N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。</p>
<p class="MachineTrans-lang-zh-CN"> </p>
<p><strong>示例 1</strong></p>
<p><img src="https://assets.leetcode.com/uploads/2018/10/12/narytreeexample.png" style="width: 100%; max-width: 300px;" /></p>
<pre>
<strong>输入:</strong>root = [1,null,3,2,4,null,5,6]
<strong>输出:</strong>3
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2019/11/08/sample_4_964.png" style="width: 296px; height: 241px;" /></p>
<pre>
<strong>输入:</strong>root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
<strong>输出:</strong>5
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li>树的深度不会超过 <code>1000</code></li>
<li>树的节点数目位于 <code>[0, 10<sup>4</sup>]</code> 之间。</li>
</ul>

View File

@@ -0,0 +1,52 @@
<p>8 间牢房排成一排,每间牢房不是有人住就是空着。</p>
<p>每天,无论牢房是被占用或空置,都会根据以下规则进行更改:</p>
<ul>
<li>如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用。</li>
<li>否则,它就会被空置。</li>
</ul>
<p>(请注意,由于监狱中的牢房排成一行,所以行中的第一个和最后一个房间无法有两个相邻的房间。)</p>
<p>我们用以下方式描述监狱的当前状态:如果第 <code>i</code> 间牢房被占用,则 <code>cell[i]==1</code>,否则 <code>cell[i]==0</code></p>
<p>根据监狱的初始状态,在 <code>N</code> 天后返回监狱的状况(和上述 N 种变化)。</p>
<p>&nbsp;</p>
<ol>
</ol>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>cells = [0,1,0,1,1,0,0,1], N = 7
<strong>输出:</strong>[0,0,1,1,0,0,0,0]
<strong>解释:
</strong>下表概述了监狱每天的状况:
Day 0: [0, 1, 0, 1, 1, 0, 0, 1]
Day 1: [0, 1, 1, 0, 0, 0, 0, 0]
Day 2: [0, 0, 0, 0, 1, 1, 1, 0]
Day 3: [0, 1, 1, 0, 0, 1, 0, 0]
Day 4: [0, 0, 0, 0, 0, 1, 0, 0]
Day 5: [0, 1, 1, 1, 0, 1, 0, 0]
Day 6: [0, 0, 1, 0, 1, 1, 0, 0]
Day 7: [0, 0, 1, 1, 0, 0, 0, 0]
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>cells = [1,0,0,1,0,0,1,0], N = 1000000000
<strong>输出:</strong>[0,0,1,1,1,1,1,0]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>cells.length == 8</code></li>
<li><code>cells[i]</code>&nbsp;的值为 <code>0</code><code>1</code>&nbsp;</li>
<li><code>1 &lt;= N &lt;= 10^9</code></li>
</ol>

View File

@@ -0,0 +1,49 @@
<p>给你 <code>nums</code> ,它是一个大小为 <code>2 * n</code> 的正整数数组。你必须对这个数组执行 <code>n</code> 次操作。</p>
<p>在第 <code>i</code> 次操作时(操作编号从 <strong>1</strong> 开始),你需要:</p>
<ul>
<li>选择两个元素 <code>x</code> 和 <code>y</code> 。</li>
<li>获得分数 <code>i * gcd(x, y)</code> 。</li>
<li>将 <code>x</code> 和 <code>y</code> 从 <code>nums</code> 中删除。</li>
</ul>
<p>请你返回 <code>n</code> 次操作后你能获得的分数和最大为多少。</p>
<p>函数 <code>gcd(x, y)</code> 是 <code>x</code> 和 <code>y</code> 的最大公约数。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>nums = [1,2]
<b>输出:</b>1
<b>解释:</b>最优操作是:
(1 * gcd(1, 2)) = 1
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>nums = [3,4,6,8]
<b>输出:</b>11
<b>解释:</b>最优操作是:
(1 * gcd(3, 6)) + (2 * gcd(4, 8)) = 3 + 8 = 11
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>nums = [1,2,3,4,5,6]
<b>输出:</b>14
<b>解释:</b>最优操作是:
(1 * gcd(1, 5)) + (2 * gcd(2, 4)) + (3 * gcd(3, 6)) = 1 + 4 + 9 = 14
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 7</code></li>
<li><code>nums.length == 2 * n</code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>6</sup></code></li>
</ul>

View File

@@ -0,0 +1,34 @@
<p><strong>n&nbsp;皇后问题</strong> 研究的是如何将 <code>n</code>&nbsp;个皇后放置在 <code>n×n</code> 的棋盘上,并且使皇后彼此之间不能相互攻击。</p>
<p>给你一个整数 <code>n</code> ,返回所有不同的&nbsp;<strong>n<em>&nbsp;</em>皇后问题</strong> 的解决方案。</p>
<div class="original__bRMd">
<div>
<p>每一种解法包含一个不同的&nbsp;<strong>n 皇后问题</strong> 的棋子放置方案,该方案中 <code>'Q'</code><code>'.'</code> 分别代表了皇后和空位。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/11/13/queens.jpg" style="width: 600px; height: 268px;" />
<pre>
<strong>输入:</strong>n = 4
<strong>输出:</strong>[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
<strong>解释:</strong>如上图所示4 皇后问题存在两个不同的解法。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 1
<strong>输出:</strong>[["Q"]]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 9</code></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,46 @@
<p>你和你的朋友,两个人一起玩&nbsp;<a href="https://baike.baidu.com/item/Nim游戏/6737105" target="_blank">Nim 游戏</a></p>
<ul>
<li>桌子上有一堆石头。</li>
<li>你们轮流进行自己的回合,&nbsp;<strong>你作为先手&nbsp;</strong></li>
<li>每一回合,轮到的人拿掉&nbsp;1 - 3 块石头。</li>
<li>拿掉最后一块石头的人就是获胜者。</li>
</ul>
<p>假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 <code>n</code> 的情况下赢得游戏。如果可以赢,返回 <code>true</code>;否则,返回 <code>false</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong><code>n = 4</code>
<strong>输出:</strong>false
<strong>解释:</strong>以下是可能的结果:
1. 移除1颗石头。你的朋友移走了3块石头包括最后一块。你的朋友赢了。
2. 移除2个石子。你的朋友移走2块石头包括最后一块。你的朋友赢了。
3.你移走3颗石子。你的朋友移走了最后一块石头。你的朋友赢了。
在所有结果中,你的朋友是赢家。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 1
<strong>输出:</strong>true
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>n = 2
<strong>输出:</strong>true
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 2<sup>31</sup> - 1</code></li>
</ul>

View File

@@ -0,0 +1,32 @@
<p><strong>n&nbsp;皇后问题</strong> 研究的是如何将 <code>n</code>&nbsp;个皇后放置在 <code>n × n</code> 的棋盘上,并且使皇后彼此之间不能相互攻击。</p>
<p>给你一个整数 <code>n</code> ,返回 <strong>n 皇后问题</strong> 不同的解决方案的数量。</p>
<p>&nbsp;</p>
<div class="original__bRMd">
<div>
<p><strong>示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/11/13/queens.jpg" style="width: 600px; height: 268px;" />
<pre>
<strong>输入:</strong>n = 4
<strong>输出:</strong>2
<strong>解释:</strong>如上图所示4 皇后问题存在两个不同的解法。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 1
<strong>输出:</strong>1
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 9</code></li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,45 @@
<p><code>RandomizedCollection</code> 是一种包含数字集合(可能是重复的)的数据结构。它应该支持插入和删除特定元素,以及删除随机元素。</p>
<p>实现 <code>RandomizedCollection</code> 类:</p>
<ul>
<li><code>RandomizedCollection()</code>初始化空的 <code>RandomizedCollection</code> 对象。</li>
<li><code>bool insert(int val)</code>&nbsp;将一个 <code>val</code> 项插入到集合中,即使该项已经存在。如果该项不存在,则返回 <code>true</code> ,否则返回 <code>false</code></li>
<li><code>bool remove(int val)</code>&nbsp;如果存在,从集合中移除一个 <code>val</code> 项。如果该项存在,则返回 <code>true</code> ,否则返回 <code>false</code> 。注意,如果 <code>val</code> 在集合中出现多次,我们只删除其中一个。</li>
<li><code>int getRandom()</code> 从当前的多个元素集合中返回一个随机元素。每个元素被返回的概率与集合中包含的相同值的数量 <strong>线性相关</strong></li>
</ul>
<p>您必须实现类的函数,使每个函数的 <strong>平均</strong> 时间复杂度为 <code>O(1)</code></p>
<p><strong>注意:</strong>生成测试用例时,只有在 <code>RandomizedCollection</code><strong>至少有一项</strong> 时,才会调用 <code>getRandom</code></p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入</strong>
["RandomizedCollection", "insert", "insert", "insert", "getRandom", "remove", "getRandom"]
[[], [1], [1], [2], [], [1], []]
<strong>输出</strong>
[null, true, false, true, 2, true, 1]
<strong>解释</strong>
RandomizedCollection collection = new RandomizedCollection();// 初始化一个空的集合。
collection.insert(1);// 向集合中插入 1 。返回 true 表示集合不包含 1 。
collection.insert(1);// 向集合中插入另一个 1 。返回 false 表示集合包含 1 。集合现在包含 [1,1] 。
collection.insert(2);// 向集合中插入 2 ,返回 true 。集合现在包含 [1,1,2] 。
collection.getRandom();// getRandom 应当有 2/3 的概率返回 1 1/3 的概率返回 2 。
collection.remove(1);// 从集合中删除 1 ,返回 true 。集合现在包含 [1,2] 。
collection.getRandom();// getRandom 应有相同概率返回 1 和 2 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>-2<sup>31</sup>&nbsp;&lt;= val &lt;= 2<sup>31</sup>&nbsp;- 1</code></li>
<li><code>insert</code>,&nbsp;<code>remove</code>&nbsp;&nbsp;<code>getRandom</code>&nbsp;最多 <strong>总共</strong> 被调用&nbsp;<code>2 * 10<sup>5</sup></code>&nbsp;</li>
<li>当调用 <code>getRandom</code> 时,数据结构中 <strong>至少有一个</strong> 元素</li>
</ul>

View File

@@ -0,0 +1,46 @@
<p>实现<code>RandomizedSet</code> 类:</p>
<div class="original__bRMd">
<div>
<ul>
<li><code>RandomizedSet()</code> 初始化 <code>RandomizedSet</code> 对象</li>
<li><code>bool insert(int val)</code> 当元素 <code>val</code> 不存在时,向集合中插入该项,并返回 <code>true</code> ;否则,返回 <code>false</code></li>
<li><code>bool remove(int val)</code> 当元素 <code>val</code> 存在时,从集合中移除该项,并返回 <code>true</code> ;否则,返回 <code>false</code></li>
<li><code>int getRandom()</code> 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 <strong>相同的概率</strong> 被返回。</li>
</ul>
<p>你必须实现类的所有函数,并满足每个函数的 <strong>平均</strong> 时间复杂度为 <code>O(1)</code></p>
<p>&nbsp;</p>
<p><strong>示例:</strong></p>
<pre>
<strong>输入</strong>
["RandomizedSet", "insert", "remove", "insert", "getRandom", "remove", "insert", "getRandom"]
[[], [1], [2], [2], [], [1], [2], []]
<strong>输出</strong>
[null, true, false, true, 2, true, false, 2]
<strong>解释</strong>
RandomizedSet randomizedSet = new RandomizedSet();
randomizedSet.insert(1); // 向集合中插入 1 。返回 true 表示 1 被成功地插入。
randomizedSet.remove(2); // 返回 false ,表示集合中不存在 2 。
randomizedSet.insert(2); // 向集合中插入 2 。返回 true 。集合现在包含 [1,2] 。
randomizedSet.getRandom(); // getRandom 应随机返回 1 或 2 。
randomizedSet.remove(1); // 从集合中移除 1 ,返回 true 。集合现在包含 [2] 。
randomizedSet.insert(2); // 2 已在集合中,所以返回 false 。
randomizedSet.getRandom(); // 由于 2 是集合中唯一的数字getRandom 总是返回 2 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>-2<sup>31</sup> &lt;= val &lt;= 2<sup>31</sup> - 1</code></li>
<li>最多调用 <code>insert</code><code>remove</code><code>getRandom</code> 函数 <code>2 *&nbsp;</code><code>10<sup>5</sup></code></li>
<li>在调用 <code>getRandom</code> 方法时,数据结构中 <strong>至少存在一个</strong> 元素。</li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,35 @@
<p>实现&nbsp;<a href="https://www.cplusplus.com/reference/valarray/pow/" target="_blank">pow(<em>x</em>, <em>n</em>)</a>&nbsp;,即计算 <code>x</code><code>n</code> 次幂函数(即,<code>x<sup>n</sup></code><sup><span style="font-size:10.8333px"> </span></sup>)。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>x = 2.00000, n = 10
<strong>输出:</strong>1024.00000
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>x = 2.10000, n = 3
<strong>输出:</strong>9.26100
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>x = 2.00000, n = -2
<strong>输出:</strong>0.25000
<strong>解释:</strong>2<sup>-2</sup> = 1/2<sup>2</sup> = 1/4 = 0.25
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>-100.0 &lt; x &lt; 100.0</code></li>
<li><code>-2<sup>31</sup> &lt;= n &lt;= 2<sup>31</sup>-1</code></li>
<li><code>-10<sup>4</sup> &lt;= x<sup>n</sup> &lt;= 10<sup>4</sup></code></li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>我们可以使用游程编码(即&nbsp;<strong>RLE&nbsp;</strong>)来编码一个整数序列。在偶数长度&nbsp;<code>encoding</code>&nbsp;( <strong>从 0 开始</strong> )的游程编码数组中,对于所有偶数 <code>i</code> <code>encoding[i]</code>&nbsp;告诉我们非负整数&nbsp;<code>encoding[i + 1]</code>&nbsp;在序列中重复的次数。</p>
<ul>
<li>例如,序列&nbsp;<code>arr = [8,8,8,5,5]</code>&nbsp;可以被编码为 <code>encoding =[3,8,2,5]</code><code>encoding =[3,8,0,9,2,5]</code>&nbsp;<code>encoding =[2,8,1,8,2,5]</code> 也是&nbsp;<code>arr</code> 有效的 <strong>RLE</strong></li>
</ul>
<p>给定一个游程长度的编码数组,设计一个迭代器来遍历它。</p>
<p>实现 <code>RLEIterator</code> 类:</p>
<ul>
<li><code>RLEIterator(int[] encoded)</code>&nbsp;用编码后的数组初始化对象。</li>
<li><code>int next(int n)</code> 以这种方式耗尽后 <code>n</code> 个元素并返回最后一个耗尽的元素。如果没有剩余的元素要耗尽,则返回 <code>-1</code></li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:
</strong>["RLEIterator","next","next","next","next"]
[[[3,8,0,9,2,5]],[2],[1],[1],[2]]
<strong>输出:
</strong>[null,8,8,5,-1]
<strong>解释:</strong>
RLEIterator rLEIterator = new RLEIterator([3, 8, 0, 9, 2, 5]); // 这映射到序列 [8,8,8,5,5]。
rLEIterator.next(2); // 耗去序列的 2 个项,返回 8。现在剩下的序列是 [8, 5, 5]。
rLEIterator.next(1); // 耗去序列的 1 个项,返回 8。现在剩下的序列是 [5, 5]。
rLEIterator.next(1); // 耗去序列的 1 个项,返回 5。现在剩下的序列是 [5]。
rLEIterator.next(2); // 耗去序列的 2 个项,返回 -1。 这是由于第一个被耗去的项是 5
但第二个项并不存在。由于最后一个要耗去的项不存在,我们返回 -1。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= encoding.length &lt;= 1000</code></li>
<li><code>encoding.length</code>&nbsp;为偶</li>
<li><code>0 &lt;= encoding[i] &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= n &lt;= 10<sup>9</sup></code></li>
<li>每个测试用例调用<code>next </code>不高于&nbsp;<code>1000</code>&nbsp;&nbsp;</li>
</ul>

View File

@@ -0,0 +1,41 @@
<p>Range模块是跟踪数字范围的模块。设计一个数据结构来跟踪表示为 <strong>半开区间</strong> 的范围并查询它们。</p>
<p><strong>半开区间</strong>&nbsp;<code>[left, right)</code>&nbsp;表示所有&nbsp;<code>left &lt;= x &lt; right</code>&nbsp;的实数 <code>x</code></p>
<p>实现 <code>RangeModule</code> 类:</p>
<ul>
<li><code>RangeModule()</code>&nbsp;初始化数据结构的对象。</li>
<li><code>void addRange(int left, int right)</code> 添加 <strong>半开区间</strong>&nbsp;<code>[left, right)</code>,跟踪该区间中的每个实数。添加与当前跟踪的数字部分重叠的区间时,应当添加在区间&nbsp;<code>[left, right)</code>&nbsp;中尚未跟踪的任何数字到该区间中。</li>
<li><code>boolean queryRange(int left, int right)</code>&nbsp;只有在当前正在跟踪区间&nbsp;<code>[left, right)</code>&nbsp;中的每一个实数时,才返回 <code>true</code>&nbsp;,否则返回 <code>false</code></li>
<li><code>void removeRange(int left, int right)</code>&nbsp;停止跟踪 <strong>半开区间</strong>&nbsp;<code>[left, right)</code>&nbsp;中当前正在跟踪的每个实数。</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入</strong>
["RangeModule", "addRange", "removeRange", "queryRange", "queryRange", "queryRange"]
[[], [10, 20], [14, 16], [10, 14], [13, 15], [16, 17]]
<strong>输出</strong>
[null, null, null, true, false, true]
<strong>解释</strong>
RangeModule rangeModule = new RangeModule();
rangeModule.addRange(10, 20);
rangeModule.removeRange(14, 16);
rangeModule.queryRange(10, 14); 返回 true (区间 [10, 14) 中的每个数都正在被跟踪)
rangeModule.queryRange(13, 15); 返回 false未跟踪区间 [13, 15) 中像 14, 14.03, 14.17 这样的数字)
rangeModule.queryRange(16, 17); 返回 true (尽管执行了删除操作,区间 [16, 17) 中的数字 16 仍然会被跟踪)
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= left &lt; right &lt;= 10<sup>9</sup></code></li>
<li>在单个测试用例中,对&nbsp;<code>addRange</code>&nbsp;&nbsp; <code>queryRange</code>&nbsp;<code>removeRange</code> 的调用总数不超过&nbsp;<code>10<sup>4</sup></code>&nbsp;</li>
</ul>

View File

@@ -0,0 +1,49 @@
<p>给你一棵由 n 个顶点组成的无向树,顶点编号从 1 到 <code>n</code>。青蛙从 <strong>顶点 1</strong> 开始起跳。规则如下:</p>
<ul>
<li>在一秒内,青蛙从它所在的当前顶点跳到另一个 <strong>未访问</strong> 过的顶点(如果它们直接相连)。</li>
<li>青蛙无法跳回已经访问过的顶点。</li>
<li>如果青蛙可以跳到多个不同顶点,那么它跳到其中任意一个顶点上的机率都相同。</li>
<li>如果青蛙不能跳到任何未访问过的顶点上,那么它每次跳跃都会停留在原地。</li>
</ul>
<p>无向树的边用数组 <code>edges</code> 描述,其中 <code>edges[i] = [from<sub>i</sub>, to<sub>i</sub>]</code> 意味着存在一条直接连通 <code>from<sub>i</sub></code><code>to<sub>i</sub></code> 两个顶点的边。</p>
<p>返回青蛙在 <em><code>t</code></em> 秒后位于目标顶点 <em><code>target</code> </em>上的概率。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img src="https://assets.leetcode.com/uploads/2021/12/21/frog1.jpg" /></p>
<pre>
<strong>输入:</strong>n = 7, edges = [[1,2],[1,3],[1,7],[2,4],[2,6],[3,5]], t = 2, target = 4
<strong>输出:</strong>0.16666666666666666
<strong>解释:</strong>上图显示了青蛙的跳跃路径。青蛙从顶点 1 起跳,第 <strong>1 秒</strong> 有 1/3 的概率跳到顶点 2 ,然后第 <strong>2 秒</strong> 有 1/2 的概率跳到顶点 4因此青蛙在 2 秒后位于顶点 4 的概率是 1/3 * 1/2 = 1/6 = 0.16666666666666666 。
</pre>
<p><strong>示例 2</strong></p>
<p><img src="https://assets.leetcode.com/uploads/2021/12/21/frog2.jpg" /></p>
<pre>
<strong>输入:</strong>n = 7, edges = [[1,2],[1,3],[1,7],[2,4],[2,6],[3,5]], t = 1, target = 7
<strong>输出:</strong>0.3333333333333333
<strong>解释:</strong>上图显示了青蛙的跳跃路径。青蛙从顶点 1 起跳,有 1/3 = 0.3333333333333333 的概率能够 <strong>1 秒</strong> 后跳到顶点 7 。
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 100</code></li>
<li><code>edges.length == n - 1</code></li>
<li><code>edges[i].length == 2</code></li>
<li><code>1 &lt;= a<sub>i</sub>, b<sub>i</sub>&nbsp;&lt;= n</code></li>
<li><code>1 &lt;= t &lt;= 50</code></li>
<li><code>1 &lt;= target &lt;= n</code></li>
</ul>

View File

@@ -0,0 +1,23 @@
<p>在老式手机上用户通过数字键盘输入手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。映射如下图所示</p>
<p><img src="https://assets.leetcode-cn.com/aliyun-lc-upload/original_images/17_telephone_keypad.png" style="width: 200px;"></p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong> num = &quot;8733&quot;, words = [&quot;tree&quot;, &quot;used&quot;]
<strong>输出:</strong> [&quot;tree&quot;, &quot;used&quot;]
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong> num = &quot;2&quot;, words = [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;]
<strong>输出:</strong> [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]</pre>
<p>提示:</p>
<ul>
<li><code>num.length &lt;= 1000</code></li>
<li><code>words.length &lt;= 500</code></li>
<li><code>words[i].length == num.length</code></li>
<li><code>num</code>中不会出现 0, 1 这两个数字</li>
</ul>

View File

@@ -0,0 +1,3 @@
<p>TinyURL是一种URL简化服务 比如当你输入一个URL&nbsp;<code>https://leetcode.com/problems/design-tinyurl</code>&nbsp;它将返回一个简化的URL&nbsp;<code>http://tinyurl.com/4e9iAk</code>.</p>
<p>要求:设计一个 TinyURL 的加密&nbsp;<code>encode</code>&nbsp;和解密&nbsp;<code>decode</code>&nbsp;的方法。你的加密和解密算法如何设计和运作是没有限制的你只需要保证一个URL可以被加密成一个TinyURL并且这个TinyURL可以用解密方法恢复成原本的URL。</p>

View File

@@ -0,0 +1,25 @@
<p>URL化。编写一种方法将字符串中的空格全部替换为<code>%20</code>。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用<code>Java</code>实现的话,请使用字符数组实现,以便直接在数组上操作。)</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入</strong>"Mr John Smith ", 13
<strong>输出</strong>"Mr%20John%20Smith"
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入</strong>" ", 5
<strong>输出</strong>"%20%20%20%20%20"
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li>字符串长度在 [0, 500000] 范围内。</li>
</ul>

View File

@@ -0,0 +1,53 @@
<p>给定一个表示数据的整数数组&nbsp;<code>data</code>&nbsp;,返回它是否为有效的 <strong>UTF-8</strong> 编码。</p>
<p><strong>UTF-8</strong> 中的一个字符可能的长度为 <strong>1 到 4 字节</strong>,遵循以下的规则:</p>
<ol>
<li>对于 <strong>1 字节</strong>&nbsp;的字符,字节的第一位设为 0 ,后面 7 位为这个符号的 unicode 码。</li>
<li>对于 <strong>n 字节</strong>&nbsp;的字符 (n &gt; 1),第一个字节的前 n 位都设为1第 n+1 位设为 0 ,后面字节的前两位一律设为 10 。剩下的没有提及的二进制位,全部为这个符号的 unicode 码。</li>
</ol>
<p>这是 UTF-8 编码的工作方式:</p>
<pre>
<code> Char. number range | UTF-8 octet sequence
(hexadecimal) | (binary)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
</code></pre>
<p><strong>注意:</strong>输入是整数数组。只有每个整数的 <strong>最低 8 个有效位</strong> 用来存储数据。这意味着每个整数只表示 1 字节的数据。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>data = [197,130,1]
<strong>输出:</strong>true
<strong>解释:</strong>数据表示字节序列:<strong>11000101 10000010 00000001</strong>
这是有效的 utf-8 编码,为一个 2 字节字符,跟着一个 1 字节字符。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>data = [235,140,4]
<strong>输出:</strong>false
<strong>解释:</strong>数据表示 8 位的序列: <strong>11101011 10001100 00000100</strong>.
前 3 位都是 1 ,第 4 位为 0 表示它是一个 3 字节字符。
下一个字节是开头为 10 的延续字节,这是正确的。
但第二个延续字节不以 10 开头,所以是不符合规则的。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= data.length &lt;= 2 * 10<sup>4</sup></code></li>
<li><code>0 &lt;= data[i] &lt;= 255</code></li>
</ul>

View File

@@ -0,0 +1,52 @@
<p>将一个给定字符串 <code>s</code> 根据给定的行数 <code>numRows</code> 以从上往下、从左到右进行 Z 字形排列。</p>
<p>比如输入字符串为 <code>"PAYPALISHIRING"</code> 行数为 <code>3</code> 时,排列如下:</p>
<pre>
P A H N
A P L S I I G
Y I R</pre>
<p>之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:<code>"PAHNAPLSIIGYIR"</code></p>
<p>请你实现这个将字符串进行指定行数变换的函数:</p>
<pre>
string convert(string s, int numRows);</pre>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>s = "PAYPALISHIRING", numRows = 3
<strong>输出:</strong>"PAHNAPLSIIGYIR"
</pre>
<strong>示例 2</strong>
<pre>
<strong>输入:</strong>s = "PAYPALISHIRING", numRows = 4
<strong>输出:</strong>"PINALSIGYAHRPI"
<strong>解释:</strong>
P I N
A L S I G
Y A H R
P I
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>s = "A", numRows = 1
<strong>输出:</strong>"A"
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= s.length <= 1000</code></li>
<li><code>s</code> 由英文字母(小写和大写)、<code>','</code><code>'.'</code> 组成</li>
<li><code>1 <= numRows <= 1000</code></li>
</ul>

View File

@@ -0,0 +1,59 @@
<p>一个 <strong>k 镜像数字</strong>&nbsp;指的是一个在十进制和 k 进制下从前往后读和从后往前读都一样的&nbsp;<strong>没有前导 0</strong>&nbsp;&nbsp;<strong></strong>&nbsp;整数。</p>
<ul>
<li>比方说,<code>9</code>&nbsp;是一个 2 镜像数字。<code>9</code>&nbsp;在十进制下为&nbsp;<code>9</code>&nbsp;,二进制下为&nbsp;<code>1001</code>&nbsp;,两者从前往后读和从后往前读都一样。</li>
<li>相反地,<code>4</code>&nbsp;不是一个 2 镜像数字。<code>4</code>&nbsp;在二进制下为&nbsp;<code>100</code>&nbsp;,从前往后和从后往前读不相同。</li>
</ul>
<p>给你进制&nbsp;<code>k</code>&nbsp;和一个数字&nbsp;<code>n</code>&nbsp;,请你返回 k 镜像数字中 <strong>最小</strong><code>n</code>&nbsp;个数 <strong>之和</strong>&nbsp;</p>
<p>&nbsp;</p>
<p><b>示例 1</b></p>
<pre><b>输入:</b>k = 2, n = 5
<b>输出:</b>25
<strong>解释:
</strong>最小的 5 个 2 镜像数字和它们的二进制表示如下:
十进制 二进制
1 1
3 11
5 101
7 111
9 1001
它们的和为 1 + 3 + 5 + 7 + 9 = 25 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>k = 3, n = 7
<b>输出:</b>499
<strong>解释:
</strong>7 个最小的 3 镜像数字和它们的三进制表示如下:
十进制 三进制
1 1
2 2
4 11
8 22
121 11111
151 12121
212 21212
它们的和为 1 + 2 + 4 + 8 + 121 + 151 + 212 = 499 。
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>k = 7, n = 17
<b>输出:</b>20379000
<b>解释:</b>17 个最小的 7 镜像数字分别为:
1, 2, 3, 4, 5, 6, 8, 121, 171, 242, 292, 16561, 65656, 2137312, 4602064, 6597956, 6958596
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= k &lt;= 9</code></li>
<li><code>1 &lt;= n &lt;= 30</code></li>
</ul>

View File

@@ -0,0 +1,39 @@
<p>给你两个正整数&nbsp;<code>n</code>&nbsp;<code>k</code>&nbsp;</p>
<p>如果正整数 <code>i</code> 满足 <code>n % i == 0</code> ,那么我们就说正整数 <code>i</code> 是整数 <code>n</code>&nbsp;的因子。</p>
<p>考虑整数 <code>n</code>&nbsp;的所有因子,将它们 <strong>升序排列</strong>&nbsp;。请你返回第 <code>k</code>&nbsp;个因子。如果 <code>n</code>&nbsp;的因子数少于 <code>k</code>&nbsp;,请你返回 <strong>-1</strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>n = 12, k = 3
<strong>输出:</strong>3
<strong>解释:</strong>因子列表包括 [1, 2, 3, 4, 6, 12],第 3 个因子是 3 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 7, k = 2
<strong>输出:</strong>7
<strong>解释:</strong>因子列表包括 [1, 7] ,第 2 个因子是 7 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>n = 4, k = 4
<strong>输出:</strong>-1
<strong>解释:</strong>因子列表包括 [1, 2, 4] ,只有 3 个因子,所以我们应该返回 -1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= k &lt;= n &lt;= 1000</code></li>
</ul>

View File

@@ -0,0 +1,24 @@
<p>把n个骰子扔在地上所有骰子朝上一面的点数之和为s。输入n打印出s的所有可能的值出现的概率。</p>
<p>&nbsp;</p>
<p>你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong> 1
<strong>输出:</strong> [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]
</pre>
<p><strong>示例&nbsp;2:</strong></p>
<pre><strong>输入:</strong> 2
<strong>输出:</strong> [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]</pre>
<p>&nbsp;</p>
<p><strong>限制:</strong></p>
<p><code>1 &lt;= n &lt;= 11</code></p>

View File

@@ -0,0 +1,30 @@
<p>给你一个非负整数 <code>x</code> ,计算并返回&nbsp;<code>x</code>&nbsp;<strong>算术平方根</strong></p>
<p>由于返回类型是整数,结果只保留 <strong>整数部分 </strong>,小数部分将被 <strong>舍去 。</strong></p>
<p><strong>注意:</strong>不允许使用任何内置指数函数和算符,例如 <code>pow(x, 0.5)</code> 或者 <code>x ** 0.5</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>x = 4
<strong>输出:</strong>2
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>x = 8
<strong>输出:</strong>2
<strong>解释:</strong>8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>0 &lt;= x &lt;= 2<sup>31</sup> - 1</code></li>
</ul>

View File

@@ -0,0 +1,36 @@
<p>给你一个字符串&nbsp;<code>text</code>,你需要使用 <code>text</code> 中的字母来拼凑尽可能多的单词&nbsp;<strong>&quot;balloon&quot;(气球)</strong></p>
<p>字符串&nbsp;<code>text</code> 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词&nbsp;<strong>&quot;balloon&quot;</strong></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><strong><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/09/14/1536_ex1_upd.jpeg" style="height: 35px; width: 154px;"></strong></p>
<pre><strong>输入:</strong>text = &quot;nlaebolko&quot;
<strong>输出:</strong>1
</pre>
<p><strong>示例 2</strong></p>
<p><strong><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/09/14/1536_ex2_upd.jpeg" style="height: 35px; width: 233px;"></strong></p>
<pre><strong>输入:</strong>text = &quot;loonbalxballpoon&quot;
<strong>输出:</strong>2
</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>text = &quot;leetcode&quot;
<strong>输出:</strong>0
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= text.length &lt;= 10^4</code></li>
<li><code>text</code>&nbsp;全部由小写英文字母组成</li>
</ul>

View File

@@ -0,0 +1,65 @@
<p>给你两个正整数&nbsp;<code>left</code>&nbsp;&nbsp;<code>right</code>&nbsp;,满足&nbsp;<code>left &lt;= right</code>&nbsp;。请你计算&nbsp;<strong>闭区间</strong>&nbsp;<code>[left, right]</code>&nbsp;中所有整数的&nbsp;<strong>乘积</strong>&nbsp;</p>
<p>由于乘积可能非常大,你需要将它按照以下步骤 <strong>缩写</strong>&nbsp;</p>
<ol>
<li>统计乘积中&nbsp;<strong>后缀</strong> 0 的数目,并 <strong>移除</strong> 这些 0 ,将这个数目记为&nbsp;<code>C</code>&nbsp;
<ul>
<li>比方说,<code>1000</code>&nbsp;中有 <code>3</code> 个后缀 0&nbsp;<code>546</code>&nbsp;中没有后缀 0 。</li>
</ul>
</li>
<li>将乘积中剩余数字的位数记为&nbsp;<code>d</code>&nbsp;。如果&nbsp;<code>d &gt; 10</code>&nbsp;,那么将乘积表示为&nbsp;<code>&lt;pre&gt;...&lt;suf&gt;</code>&nbsp;的形式,其中&nbsp;<code>&lt;pre&gt;</code>&nbsp;表示乘积最 <strong>开始</strong>&nbsp;<code>5</code>&nbsp;个数位,<code>&lt;suf&gt;</code>&nbsp;表示删除后缀 0 <strong>之后</strong>&nbsp;结尾的 <code>5</code>&nbsp;个数位。如果&nbsp;<code>d &lt;= 10</code>&nbsp;,我们不对它做修改。
<ul>
<li>比方说,我们将&nbsp;<code>1234567654321</code>&nbsp;表示为&nbsp;<code>12345...54321</code>&nbsp;,但是&nbsp;<code>1234567</code>&nbsp;仍然表示为&nbsp;<code>1234567</code>&nbsp;</li>
</ul>
</li>
<li>最后,将乘积表示为 <strong>字符串</strong>&nbsp;<code>"&lt;pre&gt;...&lt;suf&gt;eC"</code>&nbsp;
<ul>
<li>比方说,<code>12345678987600000</code>&nbsp;被表示为&nbsp;<code>"12345...89876e5"</code>&nbsp;</li>
</ul>
</li>
</ol>
<p>请你返回一个字符串,表示 <strong>闭区间</strong>&nbsp;<code>[left, right]</code>&nbsp;中所有整数&nbsp;<strong>乘积</strong>&nbsp;&nbsp;<strong>缩写</strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>left = 1, right = 4
<b>输出:</b>"24e0"
<strong>解释:</strong>
乘积为 1 × 2 × 3 × 4 = 24 。
由于没有后缀 0 ,所以 24 保持不变,缩写的结尾为 "e0" 。
因为乘积的结果是 2 位数,小于 10 ,所欲我们不进一步将它缩写。
所以,最终将乘积表示为 "24e0" 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>left = 2, right = 11
<strong>输出:</strong>"399168e2"
<strong>解释:</strong>乘积为 39916800 。
有 2 个后缀 0 ,删除后得到 399168 。缩写的结尾为 "e2" 。
删除后缀 0 后是 6 位数,不需要进一步缩写。
所以,最终将乘积表示为 "399168e2" 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>left = 371, right = 375
<strong>输出:</strong>"7219856259e3"
<strong>解释:</strong>乘积为 7219856259000 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= left &lt;= right &lt;= 10<sup>4</sup></code></li>
</ul>

View File

@@ -0,0 +1,41 @@
<p>给你一个无向图,整数 <code>n</code> 表示图中节点的数目,<code>edges</code> 数组表示图中的边,其中 <code>edges[i] = [u<sub>i</sub>, v<sub>i</sub>]</code> ,表示 <code>u<sub>i</sub></code> 和 <code>v<sub>i</sub></code><sub> </sub>之间有一条无向边。</p>
<p>一个 <strong>连通三元组</strong> 指的是 <strong>三个</strong> 节点组成的集合且这三个点之间 <strong>两两</strong> 有边。</p>
<p><strong>连通三元组的度数</strong> 是所有满足此条件的边的数目:一个顶点在这个三元组内,而另一个顶点不在这个三元组内。</p>
<p>请你返回所有连通三元组中度数的 <strong>最小值</strong> ,如果图中没有连通三元组,那么返回 <code>-1</code> 。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2021/02/14/trios1.png" style="width: 388px; height: 164px;" />
<pre>
<b>输入:</b>n = 6, edges = [[1,2],[1,3],[3,2],[4,1],[5,2],[3,6]]
<b>输出:</b>3
<b>解释:</b>只有一个三元组 [1,2,3] 。构成度数的边在上图中已被加粗。
</pre>
<p><strong>示例 2</strong></p>
<img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2021/02/14/trios2.png" style="width: 388px; height: 164px;" />
<pre>
<b>输入:</b>n = 7, edges = [[1,3],[4,1],[4,3],[2,5],[5,6],[6,7],[7,5],[2,6]]
<b>输出:</b>0
<b>解释:</b>有 3 个三元组:
1) [1,4,3],度数为 0 。
2) [2,5,6],度数为 2 。
3) [5,6,7],度数为 2 。
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 <= n <= 400</code></li>
<li><code>edges[i].length == 2</code></li>
<li><code>1 <= edges.length <= n * (n-1) / 2</code></li>
<li><code>1 <= u<sub>i</sub>, v<sub>i</sub> <= n</code></li>
<li><code>u<sub>i </sub>!= v<sub>i</sub></code></li>
<li>图中没有重复的边。</li>
</ul>

View File

@@ -0,0 +1,33 @@
<p>给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。</p>
<p>输入为三个整数:<code>day</code><code>month</code>&nbsp;<code>year</code>,分别表示日、月、年。</p>
<p>您返回的结果必须是这几个值中的一个&nbsp;<code>{&quot;Sunday&quot;, &quot;Monday&quot;, &quot;Tuesday&quot;, &quot;Wednesday&quot;, &quot;Thursday&quot;, &quot;Friday&quot;, &quot;Saturday&quot;}</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>day = 31, month = 8, year = 2019
<strong>输出:</strong>&quot;Saturday&quot;
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>day = 18, month = 7, year = 1999
<strong>输出:</strong>&quot;Sunday&quot;
</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>day = 15, month = 8, year = 1993
<strong>输出:</strong>&quot;Sunday&quot;
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li>给出的日期一定是在&nbsp;<code>1971</code>&nbsp;<code>2100</code>&nbsp;年之间的有效日期。</li>
</ul>

View File

@@ -0,0 +1,37 @@
<p>给你一个二进制字符串数组 <code>strs</code> 和两个整数 <code>m</code><code>n</code></p>
<div class="MachineTrans-Lines">
<p class="MachineTrans-lang-zh-CN">请你找出并返回 <code>strs</code> 的最大子集的长度,该子集中 <strong>最多</strong><code>m</code><code>0</code><code>n</code><code>1</code></p>
<p class="MachineTrans-lang-zh-CN">如果 <code>x</code> 的所有元素也是 <code>y</code> 的元素,集合 <code>x</code> 是集合 <code>y</code><strong>子集</strong></p>
</div>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3
<strong>输出:</strong>4
<strong>解释:</strong>最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4 。
其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"} 。{"111001"} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>strs = ["10", "0", "1"], m = 1, n = 1
<strong>输出:</strong>2
<strong>解释:</strong>最大的子集是 {"0", "1"} ,所以答案是 2 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= strs.length &lt;= 600</code></li>
<li><code>1 &lt;= strs[i].length &lt;= 100</code></li>
<li><code>strs[i]</code>&nbsp;仅由&nbsp;<code>'0'</code>&nbsp;<code>'1'</code> 组成</li>
<li><code>1 &lt;= m, n &lt;= 100</code></li>
</ul>

View File

@@ -0,0 +1,27 @@
<p>给你一个字符串&nbsp;<code>date</code> ,按 <code>YYYY-MM-DD</code> 格式表示一个 <a href="https://baike.baidu.com/item/公元/17855" target="_blank">现行公元纪年法</a> 日期。返回该日期是当年的第几天。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>date = "2019-01-09"
<strong>输出:</strong>9
<strong>解释:</strong>给定日期是2019年的第九天。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>date = "2019-02-10"
<strong>输出:</strong>41
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>date.length == 10</code></li>
<li><code>date[4] == date[7] == '-'</code>,其他的&nbsp;<code>date[i]</code>&nbsp;都是数字</li>
<li><code>date</code> 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日</li>
</ul>

View File

@@ -0,0 +1,36 @@
<p>Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是 <code>groupSize</code> ,并且由 <code>groupSize</code> 张连续的牌组成。</p>
<p>给你一个整数数组 <code>hand</code> 其中 <code>hand[i]</code> 是写在第 <code>i</code> 张牌,和一个整数 <code>groupSize</code> 。如果她可能重新排列这些牌,返回 <code>true</code> ;否则,返回 <code>false</code></p>
<p>&nbsp;</p>
<ol>
</ol>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>hand = [1,2,3,6,2,3,4,7,8], groupSize = 3
<strong>输出:</strong>true
<strong>解释:</strong>Alice 手中的牌可以被重新排列为 <code>[1,2,3][2,3,4][6,7,8]</code></pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>hand = [1,2,3,4,5], groupSize = 4
<strong>输出:</strong>false
<strong>解释:</strong>Alice 手中的牌无法被重新排列成几个大小为 4 的组。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= hand.length &lt;= 10<sup>4</sup></code></li>
<li><code>0 &lt;= hand[i] &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= groupSize &lt;= hand.length</code></li>
</ul>
<p>&nbsp;</p>
<p><strong>注意:</strong>此题目与 1296 重复:<a href="https://leetcode-cn.com/problems/divide-array-in-sets-of-k-consecutive-numbers/" target="_blank">https://leetcode-cn.com/problems/divide-array-in-sets-of-k-consecutive-numbers/</a></p>

View File

@@ -0,0 +1,20 @@
<p>字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。</p>
<p>&nbsp;</p>
<p><strong>示例&nbsp;1:</strong></p>
<pre><strong>输入:</strong>
first = &quot;pale&quot;
second = &quot;ple&quot;
<strong>输出:</strong> True</pre>
<p>&nbsp;</p>
<p><strong>示例&nbsp;2:</strong></p>
<pre><strong>输入:</strong>
first = &quot;pales&quot;
second = &quot;pal&quot;
<strong>输出:</strong> False
</pre>

View File

@@ -0,0 +1,32 @@
<p>给你一个数组 <code>nums</code> 。数组「动态和」的计算公式为:<code>runningSum[i] = sum(nums[0]&hellip;nums[i])</code></p>
<p>请返回 <code>nums</code> 的动态和。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>nums = [1,2,3,4]
<strong>输出:</strong>[1,3,6,10]
<strong>解释:</strong>动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>nums = [1,1,1,1,1]
<strong>输出:</strong>[1,2,3,4,5]
<strong>解释:</strong>动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>nums = [3,1,2,10,1]
<strong>输出:</strong>[3,4,6,16,17]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 1000</code></li>
<li><code>-10^6&nbsp;&lt;= nums[i] &lt;=&nbsp;10^6</code></li>
</ul>

View File

@@ -0,0 +1,25 @@
<p>给定一个整数 <code>num</code>,将其转化为 <strong>7 进制</strong>,并以字符串形式输出。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong> num = 100
<strong>输出:</strong> "202"
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong> num = -7
<strong>输出:</strong> "-10"
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>-10<sup>7</sup>&nbsp;&lt;= num &lt;= 10<sup>7</sup></code></li>
</ul>

View File

@@ -0,0 +1,33 @@
<p>给你一个整型数组 <code>nums</code> ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,3]
<strong>输出:</strong>6
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,3,4]
<strong>输出:</strong>24
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums = [-1,-2,-3]
<strong>输出:</strong>-6
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>3 <= nums.length <= 10<sup>4</sup></code></li>
<li><code>-1000 <= nums[i] <= 1000</code></li>
</ul>

View File

@@ -0,0 +1,31 @@
<p>给你一个整数数组 <code>nums</code> 和一个整数 <code>k</code> ,找出三个长度为 <code>k</code> 、互不重叠、且全部数字和(<code>3 * k</code> 项)最大的子数组,并返回这三个子数组。</p>
<p>以下标的数组形式返回结果,数组中的每一项分别指示每个子数组的起始位置(下标从 <strong>0</strong> 开始)。如果有多个结果,返回字典序最小的一个。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,1,2,6,7,5,1], k = 2
<strong>输出:</strong>[0,3,5]
<strong>解释:</strong>子数组 [1, 2], [2, 6], [7, 5] 对应的起始下标为 [0, 3, 5]。
也可以取 [2, 1], 但是结果 [1, 3, 5] 在字典序上更大。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,1,2,1,2,1,2,1], k = 2
<strong>输出:</strong>[0,2,4]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 2 * 10<sup>4</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;&nbsp;2<sup>16</sup></code></li>
<li><code>1 &lt;= k &lt;= floor(nums.length / 3)</code></li>
</ul>

View File

@@ -0,0 +1,34 @@
<p>三合一。描述如何只用一个数组来实现三个栈。</p>
<p>你应该实现<code>push(stackNum, value)</code><code>pop(stackNum)</code><code>isEmpty(stackNum)</code><code>peek(stackNum)</code>方法。<code>stackNum</code>表示栈下标,<code>value</code>表示压入的值。</p>
<p>构造函数会传入一个<code>stackSize</code>参数,代表每个栈的大小。</p>
<p><strong>示例1:</strong></p>
<pre>
<strong> 输入</strong>
["TripleInOne", "push", "push", "pop", "pop", "pop", "isEmpty"]
[[1], [0, 1], [0, 2], [0], [0], [0], [0]]
<strong> 输出</strong>
[null, null, null, 1, -1, -1, true]
<strong>说明</strong>:当栈为空时`pop, peek`返回-1当栈满时`push`不压入元素。
</pre>
<p><strong>示例2:</strong></p>
<pre>
<strong> 输入</strong>
["TripleInOne", "push", "push", "push", "pop", "pop", "pop", "peek"]
[[2], [0, 1], [0, 2], [0, 3], [0], [0], [0], [0]]
<strong> 输出</strong>
[null, null, null, null, 2, 1, -1, -1]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>0 &lt;= stackNum &lt;= 2</code></li>
</ul>

View File

@@ -0,0 +1,35 @@
<p>给你一个包含 <code>n</code> 个整数的数组 <code>nums</code>,判断 <code>nums</code> 中是否存在三个元素 <em>abc </em>使得 <em>a + b + c = </em>0 ?请你找出所有和为 <code>0</code> 且不重复的三元组。</p>
<p><strong>注意:</strong>答案中不可以包含重复的三元组。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [-1,0,1,2,-1,-4]
<strong>输出:</strong>[[-1,-1,2],[-1,0,1]]
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = []
<strong>输出:</strong>[]
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums = [0]
<strong>输出:</strong>[]
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>0 <= nums.length <= 3000</code></li>
<li><code>-10<sup>5</sup> <= nums[i] <= 10<sup>5</sup></code></li>
</ul>

View File

@@ -0,0 +1,39 @@
<p>给定一个整数数组<meta charset="UTF-8" />&nbsp;<code>arr</code>&nbsp;,以及一个整数&nbsp;<code>target</code>&nbsp;作为目标值,返回满足 <code>i &lt; j &lt; k</code><meta charset="UTF-8" />&nbsp;<code>arr[i] + arr[j] + arr[k] == target</code>&nbsp;的元组&nbsp;<code>i, j, k</code>&nbsp;的数量。</p>
<p>由于结果会非常大,请返回 <code>10<sup>9</sup>&nbsp;+ 7</code>&nbsp;的模。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>arr = [1,1,2,2,3,3,4,4,5,5], target = 8
<strong>输出:</strong>20
<strong>解释:</strong>
按值枚举(arr[i], arr[j], arr[k])
(1, 2, 5) 出现 8 次;
(1, 3, 4) 出现 8 次;
(2, 2, 4) 出现 2 次;
(2, 3, 3) 出现 2 次。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>arr = [1,1,2,2,2,2], target = 5
<strong>输出:</strong>12
<strong>解释:</strong>
arr[i] = 1, arr[j] = arr[k] = 2 出现 12 次:
我们从 [1,1] 中选择一个 1有 2 种情况,
从 [2,2,2,2] 中选出两个 2有 6 种情况。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>3 &lt;= arr.length &lt;= 3000</code></li>
<li><code>0 &lt;= arr[i] &lt;= 100</code></li>
<li><code>0 &lt;= target &lt;= 300</code></li>
</ul>

View File

@@ -0,0 +1,41 @@
<p>给你一个数组&nbsp;<code>nums</code>&nbsp;,每次操作你可以选择&nbsp;<code>nums</code>&nbsp;中的任意一个元素并将它改成任意值。</p>
<p>请你返回三次操作后, <code>nums</code>&nbsp;中最大值与最小值的差的最小值。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>nums = [5,3,2,4]
<strong>输出:</strong>0
<strong>解释:</strong>将数组 [5,3,2,4] 变成 [<strong>2</strong>,<strong>2</strong>,2,<strong>2</strong>].
最大值与最小值的差为 2-2 = 0 。</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>nums = [1,5,0,10,14]
<strong>输出:</strong>1
<strong>解释:</strong>将数组 [1,5,0,10,14] 变成 [1,<strong>1</strong>,0,<strong>1</strong>,<strong>1</strong>] 。
最大值与最小值的差为 1-0 = 1 。
</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>nums = [6,6,0,1,1,4,6]
<strong>输出:</strong>2
</pre>
<p><strong>示例 4</strong></p>
<pre><strong>输入:</strong>nums = [1,5,6,14,15]
<strong>输出:</strong>1
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 10^5</code></li>
<li><code>-10^9 &lt;= nums[i] &lt;= 10^9</code></li>
</ul>

View File

@@ -0,0 +1,22 @@
<p>三步问题。有个小孩正在上楼梯楼梯有n阶台阶小孩一次可以上1阶、2阶或3阶。实现一种方法计算小孩有多少种上楼梯的方式。结果可能很大你需要对结果模1000000007。</p>
<p> <strong>示例1:</strong></p>
<pre>
<strong> 输入</strong>n = 3
<strong> 输出</strong>4
<strong> 说明</strong>: 有四种走法
</pre>
<p> <strong>示例2:</strong></p>
<pre>
<strong> 输入</strong>n = 5
<strong> 输出</strong>13
</pre>
<p> <strong>提示:</strong></p>
<ol>
<li>n范围在[1, 1000000]之间</li>
</ol>

View File

@@ -0,0 +1,46 @@
<p>给定一个由 <code>0</code><code>1</code> 组成的数组<meta charset="UTF-8" />&nbsp;<code>arr</code>&nbsp;,将数组分成 &nbsp;<strong>3&nbsp;个非空的部分</strong> ,使得所有这些部分表示相同的二进制值。</p>
<p>如果可以做到,请返回<strong>任何</strong>&nbsp;<code>[i, j]</code>,其中 <code>i+1 &lt; j</code>,这样一来:</p>
<ul>
<li><code>arr[0], arr[1], ..., arr[i]</code>&nbsp;为第一部分;</li>
<li><code>arr[i + 1], arr[i + 2], ..., arr[j - 1]</code>&nbsp;为第二部分;</li>
<li><code>arr[j], arr[j + 1], ..., arr[arr.length - 1]</code>&nbsp;为第三部分。</li>
<li>这三个部分所表示的二进制值相等。</li>
</ul>
<p>如果无法做到,就返回&nbsp;<code>[-1, -1]</code></p>
<p>注意,在考虑每个部分所表示的二进制时,应当将其看作一个整体。例如,<code>[1,1,0]</code>&nbsp;表示十进制中的&nbsp;<code>6</code>,而不会是&nbsp;<code>3</code>。此外,前导零也是<strong>被允许</strong>的,所以&nbsp;<code>[0,1,1]</code>&nbsp;<code>[1,1]</code>&nbsp;表示相同的值。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>arr = [1,0,1,0,1]
<strong>输出:</strong>[0,3]
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>arr = [1,1,0,1,1]
<strong>输出:</strong>[-1,-1]</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>arr = [1,1,0,0,1]
<strong>输出:</strong>[0,2]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<meta charset="UTF-8" />
<ul>
<li><code>3 &lt;= arr.length &lt;= 3 * 10<sup>4</sup></code></li>
<li><code>arr[i]</code>&nbsp;&nbsp;<code>0</code>&nbsp;&nbsp;<code>1</code></li>
</ul>

View File

@@ -0,0 +1,57 @@
<p><meta charset="UTF-8" />&nbsp;<code>n x n</code>&nbsp;的网格<meta charset="UTF-8" />&nbsp;<code>grid</code>&nbsp;中,我们放置了一些与 xyz 三轴对齐的<meta charset="UTF-8" />&nbsp;<code>1 x 1 x 1</code>&nbsp;立方体。</p>
<p>每个值&nbsp;<code>v = grid[i][j]</code>&nbsp;表示 <code>v</code>&nbsp;个正方体叠放在单元格&nbsp;<code>(i, j)</code>&nbsp;上。</p>
<p>现在,我们查看这些立方体在 <code>xy</code>&nbsp;<code>yz</code>&nbsp;<code>zx</code>&nbsp;平面上的<em>投影</em></p>
<p><strong>投影</strong>&nbsp;就像影子,将 <strong>三维</strong> 形体映射到一个 <strong>二维</strong> 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。</p>
<p>返回 <em>所有三个投影的总面积</em></p>
<p>&nbsp;</p>
<ul>
</ul>
<ul>
</ul>
<ul>
</ul>
<ul>
</ul>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://s3-lc-upload.s3.amazonaws.com/uploads/2018/08/02/shadow.png" style="height: 214px; width: 800px;" /></p>
<pre>
<strong>输入:</strong>[[1,2],[3,4]]
<strong>输出:</strong>17
<strong>解释:</strong>这里有该形体在三个轴对齐平面上的三个投影(“阴影部分”)。
</pre>
<p><strong>示例&nbsp;2:</strong></p>
<pre>
<strong>输入:</strong>grid = [[2]]
<strong>输出:</strong>5
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>[[1,0],[0,2]]
<strong>输出:</strong>8
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == grid.length == grid[i].length</code></li>
<li><code>1 &lt;= n &lt;= 50</code></li>
<li><code>0 &lt;= grid[i][j] &lt;= 50</code></li>
</ul>

View File

@@ -0,0 +1,44 @@
<p>给你一个 <code>n * n</code> 的网格&nbsp;<code>grid</code> ,上面放置着一些&nbsp;<code>1 x 1 x 1</code>&nbsp;的正方体。每个值&nbsp;<code>v = grid[i][j]</code>&nbsp;表示&nbsp;<code>v</code>&nbsp;个正方体叠放在对应单元格&nbsp;<code>(i, j)</code>&nbsp;上。</p>
<p>放置好正方体后,任何直接相邻的正方体都会互相粘在一起,形成一些不规则的三维形体。</p>
<p>请你返回最终这些形体的总表面积。</p>
<p><strong>注意:</strong>每个形体的底面也需要计入表面积中。</p>
<p>&nbsp;</p>
<ul>
</ul>
<p><strong>示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2021/01/08/tmp-grid2.jpg" style="height: 80px; width: 80px;" />
<pre>
<strong>输入:</strong>grid = [[1,2],[3,4]]
<strong>输出:</strong>34
</pre>
<p><strong>示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2021/01/08/tmp-grid4.jpg" style="height: 100px; width: 100px;" />
<pre>
<strong>输入:</strong>grid = [[1,1,1],[1,0,1],[1,1,1]]
<strong>输出:</strong>32
</pre>
<p><strong>示例 3</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2021/01/08/tmp-grid5.jpg" style="height: 100px; width: 100px;" />
<pre>
<strong>输入:</strong>grid = [[2,2,2],[2,1,2],[2,2,2]]
<strong>输出:</strong>46
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == grid.length</code></li>
<li><code>n == grid[i].length</code></li>
<li><code>1 &lt;= n &lt;= 50</code></li>
<li><code>0 &lt;= grid[i][j] &lt;= 50</code></li>
</ul>

View File

@@ -0,0 +1,48 @@
<p>给定一个三角形 <code>triangle</code> ,找出自顶向下的最小路径和。</p>
<p>每一步只能移动到下一行中相邻的结点上。<strong>相邻的结点 </strong>在这里指的是 <strong>下标</strong><strong>上一层结点下标</strong> 相同或者等于 <strong>上一层结点下标 + 1</strong> 的两个结点。也就是说,如果正位于当前行的下标 <code>i</code> ,那么下一步可以移动到下一行的下标 <code>i</code><code>i + 1</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]
<strong>输出:</strong>11
<strong>解释:</strong>如下面简图所示:
<strong>2</strong>
<strong>3</strong> 4
6 <strong>5</strong> 7
4 <strong>1</strong> 8 3
自顶向下的最小路径和为&nbsp;112&nbsp;+&nbsp;3&nbsp;+&nbsp;5&nbsp;+&nbsp;1&nbsp;= 11
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>triangle = [[-10]]
<strong>输出:</strong>-10
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= triangle.length &lt;= 200</code></li>
<li><code>triangle[0].length == 1</code></li>
<li><code>triangle[i].length == triangle[i - 1].length + 1</code></li>
<li><code>-10<sup>4</sup> &lt;= triangle[i][j] &lt;= 10<sup>4</sup></code></li>
</ul>
<p>&nbsp;</p>
<p><strong>进阶:</strong></p>
<ul>
<li>你可以只使用 <code>O(n)</code>&nbsp;的额外空间(<code>n</code> 为三角形的总行数)来解决这个问题吗?</li>
</ul>
<p>&nbsp;</p>
<p><meta charset="UTF-8" />注意:本题与主站 120&nbsp;题相同:&nbsp;<a href="https://leetcode-cn.com/problems/triangle/">https://leetcode-cn.com/problems/triangle/</a></p>

View File

@@ -0,0 +1,44 @@
<p>给定一个三角形 <code>triangle</code> ,找出自顶向下的最小路径和。</p>
<p>每一步只能移动到下一行中相邻的结点上。<strong>相邻的结点 </strong>在这里指的是 <strong>下标</strong><strong>上一层结点下标</strong> 相同或者等于 <strong>上一层结点下标 + 1</strong> 的两个结点。也就是说,如果正位于当前行的下标 <code>i</code> ,那么下一步可以移动到下一行的下标 <code>i</code><code>i + 1</code></p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]
<strong>输出:</strong>11
<strong>解释:</strong>如下面简图所示:
<strong>2</strong>
<strong>3</strong> 4
6 <strong>5</strong> 7
4 <strong>1</strong> 8 3
自顶向下的最小路径和为 112 + 3 + 5 + 1 = 11
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>triangle = [[-10]]
<strong>输出:</strong>-10
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= triangle.length <= 200</code></li>
<li><code>triangle[0].length == 1</code></li>
<li><code>triangle[i].length == triangle[i - 1].length + 1</code></li>
<li><code>-10<sup>4</sup> <= triangle[i][j] <= 10<sup>4</sup></code></li>
</ul>
<p> </p>
<p><strong>进阶:</strong></p>
<ul>
<li>你可以只使用 <code>O(n)</code> 的额外空间(<code>n</code> 为三角形的总行数)来解决这个问题吗?</li>
</ul>

View File

@@ -0,0 +1,29 @@
<p>给定由一些正数(代表长度)组成的数组 <code>nums</code>&nbsp;,返回 <em>由其中三个长度组成的、<strong>面积不为零</strong>的三角形的最大周长</em>&nbsp;。如果不能形成任何面积不为零的三角形,返回&nbsp;<code>0</code></p>
<p>&nbsp;</p>
<ol>
</ol>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [2,1,2]
<strong>输出:</strong>5
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,1]
<strong>输出:</strong>0
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>3 &lt;= nums.length &lt;= 10<sup>4</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>6</sup></code></li>
</ul>

View File

@@ -0,0 +1,26 @@
<p>给你一个整数 <code>n</code> 。如果 <code>n</code> <strong>恰好有三个正除数</strong> ,返回 <code>true</code><em> </em>;否则,返回<em> </em><code>false</code></p>
<p>如果存在整数 <code>k</code> ,满足 <code>n = k * m</code> ,那么整数 <code>m</code> 就是 <code>n</code> 的一个 <strong>除数</strong></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>n = 2
<strong>输出:</strong>false
<strong>解释:</strong>2 只有两个除数1 和 2 。</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>n = 4
<strong>输出:</strong>true
<strong>解释:</strong>4 有三个除数1、2 和 4 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 10<sup>4</sup></code></li>
</ul>

View File

@@ -0,0 +1,62 @@
<p>给你一个字符串&nbsp;<code>s</code>&nbsp;,请你根据下面的算法重新构造字符串:</p>
<ol>
<li><code>s</code>&nbsp;中选出 <strong>最小</strong>&nbsp;的字符,将它 <strong>接在</strong>&nbsp;结果字符串的后面。</li>
<li><code>s</code>&nbsp;剩余字符中选出&nbsp;<strong>最小</strong>&nbsp;的字符,且该字符比上一个添加的字符大,将它 <strong>接在</strong>&nbsp;结果字符串后面。</li>
<li>重复步骤 2 ,直到你没法从 <code>s</code>&nbsp;中选择字符。</li>
<li><code>s</code>&nbsp;中选出 <strong>最大</strong>&nbsp;的字符,将它 <strong>接在</strong>&nbsp;结果字符串的后面。</li>
<li><code>s</code>&nbsp;剩余字符中选出&nbsp;<strong>最大</strong>&nbsp;的字符,且该字符比上一个添加的字符小,将它 <strong>接在</strong>&nbsp;结果字符串后面。</li>
<li>重复步骤 5&nbsp;,直到你没法从 <code>s</code>&nbsp;中选择字符。</li>
<li>重复步骤 1 到 6 ,直到 <code>s</code>&nbsp;中所有字符都已经被选过。</li>
</ol>
<p>在任何一步中,如果最小或者最大字符不止一个&nbsp;,你可以选择其中任意一个,并将其添加到结果字符串。</p>
<p>请你返回将&nbsp;<code>s</code>&nbsp;中字符重新排序后的 <strong>结果字符串</strong></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>s = &quot;aaaabbbbcccc&quot;
<strong>输出:</strong>&quot;abccbaabccba&quot;
<strong>解释:</strong>第一轮的步骤 123 后,结果字符串为 result = &quot;abc&quot;
第一轮的步骤 456 后,结果字符串为 result = &quot;abccba&quot;
第一轮结束,现在 s = &quot;aabbcc&quot; ,我们再次回到步骤 1
第二轮的步骤 123 后,结果字符串为 result = &quot;abccbaabc&quot;
第二轮的步骤 456 后,结果字符串为 result = &quot;abccbaabccba&quot;
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>s = &quot;rat&quot;
<strong>输出:</strong>&quot;art&quot;
<strong>解释:</strong>单词 &quot;rat&quot; 在上述算法重排序以后变成 &quot;art&quot;
</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>s = &quot;leetcode&quot;
<strong>输出:</strong>&quot;cdelotee&quot;
</pre>
<p><strong>示例 4</strong></p>
<pre><strong>输入:</strong>s = &quot;ggggggg&quot;
<strong>输出:</strong>&quot;ggggggg&quot;
</pre>
<p><strong>示例 5</strong></p>
<pre><strong>输入:</strong>s = &quot;spo&quot;
<strong>输出:</strong>&quot;ops&quot;
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 500</code></li>
<li><code>s</code>&nbsp;只包含小写英文字母。</li>
</ul>

View File

@@ -0,0 +1,50 @@
<div class="original__bRMd">
<div>
<p>表:&nbsp;<code>Weather</code></p>
<pre>
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| recordDate | date |
| temperature | int |
+---------------+---------+
id 是这个表的主键
该表包含特定日期的温度信息</pre>
<p>&nbsp;</p>
<p>编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 <code>id</code></p>
<p>返回结果 <strong>不要求顺序</strong></p>
<p>查询结果格式如下例。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<code><strong>输入:</strong>
Weather 表:</code>
+----+------------+-------------+
| id | recordDate | Temperature |
+----+------------+-------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+----+------------+-------------+
<strong>输出:</strong>
+----+
| id |
+----+
| 2 |
| 4 |
+----+
<strong>解释:</strong>
2015-01-02 的温度比前一天高10 -&gt; 25
2015-01-04 的温度比前一天高20 -&gt; 30</pre>
</div>
</div>

View File

@@ -0,0 +1,49 @@
<p>整数数组的一个 <strong>排列</strong>&nbsp; 就是将其所有成员以序列或线性顺序排列。</p>
<ul>
<li>例如,<code>arr = [1,2,3]</code> ,以下这些都可以视作 <code>arr</code> 的排列:<code>[1,2,3]</code><code>[1,3,2]</code><code>[3,1,2]</code><code>[2,3,1]</code></li>
</ul>
<p>整数数组的 <strong>下一个排列</strong> 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 <strong>下一个排列</strong> 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。</p>
<ul>
<li>例如,<code>arr = [1,2,3]</code> 的下一个排列是 <code>[1,3,2]</code></li>
<li>类似地,<code>arr = [2,3,1]</code> 的下一个排列是 <code>[3,1,2]</code></li>
<li><code>arr = [3,2,1]</code> 的下一个排列是 <code>[1,2,3]</code> ,因为 <code>[3,2,1]</code> 不存在一个字典序更大的排列。</li>
</ul>
<p>给你一个整数数组 <code>nums</code> ,找出 <code>nums</code> 的下一个排列。</p>
<p>必须<strong><a href="https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95" target="_blank"> 原地 </a></strong>修改,只允许使用额外常数空间。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,3]
<strong>输出:</strong>[1,3,2]
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [3,2,1]
<strong>输出:</strong>[1,2,3]
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums = [1,1,5]
<strong>输出:</strong>[1,5,1]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 100</code></li>
<li><code>0 &lt;= nums[i] &lt;= 100</code></li>
</ul>

View File

@@ -0,0 +1,22 @@
<p>下一个数。给定一个正整数找出与其二进制表达式中1的个数相同且大小最接近的那两个数一个略大一个略小</p>
<p> <strong>示例1:</strong></p>
<pre>
<strong> 输入</strong>num = 2或者0b10
<strong> 输出</strong>[4, 1] 或者([0b100, 0b1]
</pre>
<p> <strong>示例2:</strong></p>
<pre>
<strong> 输入</strong>num = 1
<strong> 输出</strong>[2, -1]
</pre>
<p> <strong>提示:</strong></p>
<ol>
<li><code>num</code>的范围在[1, 2147483647]之间;</li>
<li>如果找不到前一个或者后一个满足条件的正数,那么输出 -1。</li>
</ol>

View File

@@ -0,0 +1,44 @@
<p><code>nums1</code>&nbsp;中数字&nbsp;<code>x</code>&nbsp;<strong>下一个更大元素</strong> 是指&nbsp;<code>x</code>&nbsp;&nbsp;<code>nums2</code> 中对应位置 <strong>右侧</strong><strong>第一个</strong>&nbsp;<code>x</code><strong>&nbsp;</strong>大的元素。</p>
<p>给你两个<strong> 没有重复元素</strong> 的数组&nbsp;<code>nums1</code>&nbsp;<code>nums2</code> ,下标从 <strong>0</strong> 开始计数,其中<code>nums1</code>&nbsp;&nbsp;<code>nums2</code>&nbsp;的子集。</p>
<p>对于每个 <code>0 &lt;= i &lt; nums1.length</code> ,找出满足 <code>nums1[i] == nums2[j]</code> 的下标 <code>j</code> ,并且在 <code>nums2</code> 确定 <code>nums2[j]</code><strong>下一个更大元素</strong> 。如果不存在下一个更大元素,那么本次查询的答案是 <code>-1</code></p>
<p>返回一个长度为&nbsp;<code>nums1.length</code> 的数组<em> </em><code>ans</code><em> </em>作为答案,满足<em> </em><code>ans[i]</code><em> </em>是如上所述的 <strong>下一个更大元素</strong></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums1 = [4,1,2], nums2 = [1,3,4,2].
<strong>输出:</strong>[-1,3,-1]
<strong>解释:</strong>nums1 中每个值的下一个更大元素如下所述:
- 4 用加粗斜体标识nums2 = [1,3,<strong>4</strong>,2]。不存在下一个更大元素,所以答案是 -1 。
- 1 用加粗斜体标识nums2 = [<em><strong>1</strong></em>,3,4,2]。下一个更大元素是 3 。
- 2 用加粗斜体标识nums2 = [1,3,4,<em><strong>2</strong></em>]。不存在下一个更大元素,所以答案是 -1 。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums1 = [2,4], nums2 = [1,2,3,4].
<strong>输出:</strong>[3,-1]
<strong>解释:</strong>nums1 中每个值的下一个更大元素如下所述:
- 2 用加粗斜体标识nums2 = [1,<em><strong>2</strong></em>,3,4]。下一个更大元素是 3 。
- 4 用加粗斜体标识nums2 = [1,2,3,<em><strong>4</strong></em>]。不存在下一个更大元素,所以答案是 -1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums1.length &lt;= nums2.length &lt;= 1000</code></li>
<li><code>0 &lt;= nums1[i], nums2[i] &lt;= 10<sup>4</sup></code></li>
<li><code>nums1</code><code>nums2</code>中所有整数 <strong>互不相同</strong></li>
<li><code>nums1</code> 中的所有整数同样出现在 <code>nums2</code></li>
</ul>
<p>&nbsp;</p>
<p><strong>进阶:</strong>你可以设计一个时间复杂度为 <code>O(nums1.length + nums2.length)</code> 的解决方案吗?</p>

View File

@@ -0,0 +1,31 @@
<p>给定一个循环数组&nbsp;<code>nums</code>&nbsp;&nbsp;<code>nums[nums.length - 1]</code>&nbsp;的下一个元素是&nbsp;<code>nums[0]</code>&nbsp;),返回&nbsp;<em><code>nums</code>&nbsp;中每个元素的 <strong>下一个更大元素</strong></em></p>
<p>数字 <code>x</code>&nbsp;<strong>下一个更大的元素</strong> 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 <code>-1</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong> nums = [1,2,1]
<strong>输出:</strong> [2,-1,2]
<strong>解释:</strong> 第一个 1 的下一个更大的数是 2
数字 2 找不到下一个更大的数;
第二个 1 的下一个最大的数需要循环搜索,结果也是 2。
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong> nums = [1,2,3,4,3]
<strong>输出:</strong> [2,3,4,-1,4]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 10<sup>4</sup></code></li>
<li><code>-10<sup>9</sup>&nbsp;&lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,27 @@
<p>给你一个正整数 <code>n</code> ,请你找出符合条件的最小整数,其由重新排列 <code>n</code><strong> </strong>中存在的每位数字组成,并且其值大于 <code>n</code> 。如果不存在这样的正整数,则返回 <code>-1</code></p>
<p><strong>注意</strong> ,返回的整数应当是一个 <strong>32 位整数</strong> ,如果存在满足题意的答案,但不是 <strong>32 位整数</strong> ,同样返回 <code>-1</code></p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>n = 12
<strong>输出:</strong>21
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 21
<strong>输出:</strong>-1
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= n <= 2<sup>31</sup> - 1</code></li>
</ul>

Some files were not shown because too many files have changed in this diff Show More