提交 8d4af9c5 编写于 作者: 每日一练社区's avatar 每日一练社区

add exercises

上级 2170b8b3

要显示的变更太多。

To preserve performance only 1000 of 1000+ files are displayed.
<p>在 <code>N x N</code> 的网格 <code>grid</code> 上,每个单元格都有一盏灯,最初灯都处于 <strong>关闭</strong> 状态。</p>
<p>数组 <code>lamps</code> 表示打开的灯的位置。<code>lamps[i] = [row<sub>i</sub>, col<sub>i</sub>]</code> 表示 <strong>打开</strong> 位于 <code>grid[row<sub>i</sub>][col<sub>i</sub>]</code> 的第 <code>i</code> 盏灯 。每盏灯都照亮自身单元格以及同一行、同一列和两条对角线上的所有其他单元格。</p>
<p>查询数组 <code>queries</code> 中,第 <code>i</code> 次查询 <code>queries[i] = [row<sub>i</sub>, col<sub>i</sub>]</code>,如果单元格 <code>[row<sub>i</sub>, col<sub>i</sub>]</code> 是被照亮的,则查询结果为 <code>1</code> ,否则为 <code>0</code> 。在第 <code>i</code> 次查询之后 [按照查询的顺序] ,<strong>关闭</strong> 位于单元格 <code>grid[row<sub>i</sub>][col<sub>i</sub>]</code> 上或其相邻 8 个方向上(与单元格 <code>grid[row<sub>i</sub>][col<sub>i</sub>]</code> 共享角或边)的任何灯。</p>
<p>返回答案数组 <code>ans</code><code>answer[i]</code> 应等于第 <code>i</code> 次查询 <code>queries[i]</code> 的结果,<code>1</code> 表示照亮,<code>0</code> 表示未照亮。</p>
<p> </p>
<p><strong>示例 1:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/08/19/illu_1.jpg" style="width: 750px; height: 209px;" />
<pre>
<strong>输入:</strong>N = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,0]]
<strong>输出:</strong>[1,0]
<strong>解释:</strong>最初所有灯都是关闭的。在执行查询之前,打开位于 [0, 0] 和 [4, 4] 的灯。第 0 次查询检查 grid[1][1] 是否被照亮(蓝色方框)。该单元格被照亮,所以 ans[0] = 1 。然后,关闭红色方框中的所有灯。
<img alt="" src="https://assets.leetcode.com/uploads/2020/08/19/illu_step1.jpg" style="width: 500px; height: 218px;" />
第 1 次查询检查 grid[1][0] 是否被照亮(蓝色方框)。该单元格没有被照亮,所以 ans[1] = 0 。然后,关闭红色矩形中的所有灯。
<img alt="" src="https://assets.leetcode.com/uploads/2020/08/19/illu_step2.jpg" style="width: 500px; height: 219px;" />
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>N = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,1]]
<strong>输出:</strong>[1,1]
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>N = 5, lamps = [[0,0],[0,4]], queries = [[0,4],[0,1],[1,4]]
<strong>输出:</strong>[1,1,0]
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= N <= 10<sup>9</sup></code></li>
<li><code>0 <= lamps.length <= 20000</code></li>
<li><code>lamps[i].length == 2</code></li>
<li><code>0 <= lamps[i][j] < N</code></li>
<li><code>0 <= queries.length <= 20000</code></li>
<li><code>queries[i].length == 2</code></li>
<li><code>0 <= queries[i][j] < N</code></li>
</ul>
给你一个字符串数组 <code>words</code> ,请你找出所有在 <code>words</code> 的每个字符串中都出现的共用字符( <strong>包括重复字符</strong>),并以数组形式返回。你可以按 <strong>任意顺序</strong> 返回答案。
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>words = ["bella","label","roller"]
<strong>输出:</strong>["e","l","l"]
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>words = ["cool","lock","cook"]
<strong>输出:</strong>["c","o"]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= words.length &lt;= 100</code></li>
<li><code>1 &lt;= words[i].length &lt;= 100</code></li>
<li><code>words[i]</code> 由小写英文字母组成</li>
</ul>
给你一个字符串 <code>s</code> ,请你判断它是否 <strong>有效</strong>
<p>字符串 <code>s</code> <strong>有效</strong> 需要满足:假设开始有一个空字符串 <code>t = ""</code> ,你可以执行 <strong>任意次</strong> 下述操作将<strong> </strong><code>t</code><strong> 转换为 </strong><code>s</code></p>
<ul>
<li>将字符串 <code>"abc"</code> 插入到 <code>t</code> 中的任意位置。形式上,<code>t</code> 变为 <code>t<sub>left</sub> + "abc" + t<sub>right</sub></code>,其中 <code>t == t<sub>left</sub> + t<sub>right</sub></code> 。注意,<code>t<sub>left</sub></code><code>t<sub>right</sub></code> 可能为 <strong></strong></li>
</ul>
<p>如果字符串 <code>s</code> 有效,则返回 <code>true</code>;否则,返回 <code>false</code></p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>s = "aabcbc"
<strong>输出:</strong>true
<strong>解释:</strong>
"" -> "<strong>abc</strong>" -> "a<strong>abc</strong>bc"
因此,"aabcbc" 有效。</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>s = "abcabcababcc"
<strong>输出:</strong>true
<strong>解释:</strong>
"" -> "<strong>abc</strong>" -> "abc<strong>abc</strong>" -> "abcabc<strong>abc</strong>" -> "abcabcab<strong>abc</strong>c"
因此,"abcabcababcc" 有效。</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>s = "abccba"
<strong>输出:</strong>false
<strong>解释:</strong>执行操作无法得到 "abccba" 。</pre>
<p><strong>示例 4:</strong></p>
<pre>
<strong>输入:</strong>s = "cababc"
<strong>输出:</strong>false
<strong>解释:</strong>执行操作无法得到 "cababc" 。</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= s.length <= 2 * 10<sup>4</sup></code></li>
<li><code>s</code> 由字母 <code>'a'</code><code>'b'</code><code>'c'</code> 组成</li>
</ul>
<p>给定一个由若干 <code>0</code><code>1</code> 组成的数组&nbsp;<code>A</code>,我们最多可以将&nbsp;<code>K</code>&nbsp;个值从 0 变成 1 。</p>
<p>返回仅包含 1 的最长(连续)子数组的长度。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
<strong>输出:</strong>6
<strong>解释: </strong>
[1,1,1,0,0,<strong>1</strong>,1,1,1,1,<strong>1</strong>]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
<strong>输出:</strong>10
<strong>解释:</strong>
[0,0,1,1,<strong>1</strong>,<strong>1</strong>,1,1,1,<strong>1</strong>,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= A.length &lt;= 20000</code></li>
<li><code>0 &lt;= K &lt;= A.length</code></li>
<li><code>A[i]</code>&nbsp;<code>0</code>&nbsp;&nbsp;<code>1</code>&nbsp;</li>
</ol>
<p>给定一个整数数组 A,我们<strong>只能</strong>用以下方法修改该数组:我们选择某个索引 <code>i</code>&nbsp;并将 <code>A[i]</code> 替换为 <code>-A[i]</code>,然后总共重复这个过程 <code>K</code> 次。(我们可以多次选择同一个索引 <code>i</code>。)</p>
<p>以这种方式修改数组后,返回数组可能的最大和。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>A = [4,2,3], K = 1
<strong>输出:</strong>5
<strong>解释:</strong>选择索引 (1,) ,然后 A 变为 [4,-2,3]。
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>A = [3,-1,0,2], K = 3
<strong>输出:</strong>6
<strong>解释:</strong>选择索引 (1, 2, 2) ,然后 A 变为 [3,1,0,2]。
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>A = [2,-3,-1,5,-4], K = 2
<strong>输出:</strong>13
<strong>解释:</strong>选择索引 (1, 4) ,然后 A 变为 [2,3,-1,5,4]。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= A.length &lt;= 10000</code></li>
<li><code>1 &lt;= K &lt;= 10000</code></li>
<li><code>-100 &lt;= A[i] &lt;= 100</code></li>
</ol>
<p>通常,正整数 <code>n</code> 的阶乘是所有小于或等于 <code>n</code> 的正整数的乘积。例如,<code>factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1</code></p>
<p>相反,我们设计了一个笨阶乘 <code>clumsy</code>:在整数的递减序列中,我们以一个固定顺序的操作符序列来依次替换原有的乘法操作符:乘法(*),除法(/),加法(+)和减法(-)。</p>
<p>例如,<code>clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1</code>。然而,这些运算仍然使用通常的算术运算顺序:我们在任何加、减步骤之前执行所有的乘法和除法步骤,并且按从左到右处理乘法和除法步骤。</p>
<p>另外,我们使用的除法是地板除法(<em>floor division</em>),所以&nbsp;<code>10 * 9 / 8</code>&nbsp;等于&nbsp;<code>11</code>。这保证结果是一个整数。</p>
<p>实现上面定义的笨函数:给定一个整数 <code>N</code>,它返回 <code>N</code> 的笨阶乘。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>4
<strong>输出:</strong>7
<strong>解释:</strong>7 = 4 * 3 / 2 + 1
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>10
<strong>输出:</strong>12
<strong>解释:</strong>12 = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= N &lt;= 10000</code></li>
<li><code>-2^31 &lt;= answer &lt;= 2^31 - 1</code>&nbsp; (答案保证符合 32 位整数。)</li>
</ol>
<p>在一排多米诺骨牌中,<code>A[i]</code><code>B[i]</code>&nbsp;分别代表第 i 个多米诺骨牌的上半部分和下半部分。(一个多米诺是两个从 1 到 6 的数字同列平铺形成的&nbsp;&mdash;&mdash; 该平铺的每一半上都有一个数字。)</p>
<p>我们可以旋转第&nbsp;<code>i</code>&nbsp;张多米诺,使得&nbsp;<code>A[i]</code>&nbsp;<code>B[i]</code>&nbsp;的值交换。</p>
<p>返回能使 <code>A</code> 中所有值或者 <code>B</code> 中所有值都相同的最小旋转次数。</p>
<p>如果无法做到,返回&nbsp;<code>-1</code>.</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/03/08/domino.png" style="height: 161px; width: 200px;"></p>
<pre><strong>输入:</strong>A = [2,1,2,4,2,2], B = [5,2,6,2,3,2]
<strong>输出:</strong>2
<strong>解释:</strong>
图一表示:在我们旋转之前, A 和 B 给出的多米诺牌。
如果我们旋转第二个和第四个多米诺骨牌,我们可以使上面一行中的每个值都等于 2,如图二所示。
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>A = [3,5,1,2,3], B = [3,6,3,3,4]
<strong>输出:</strong>-1
<strong>解释:</strong>
在这种情况下,不可能旋转多米诺牌使一行的值相等。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= A[i], B[i] &lt;= 6</code></li>
<li><code>2 &lt;= A.length == B.length &lt;= 20000</code></li>
</ol>
<p>返回与给定前序遍历&nbsp;<code>preorder</code> 相匹配的二叉搜索树(binary <strong>search</strong> tree)的根结点。</p>
<p><em>(回想一下,二叉搜索树是二叉树的一种,其每个节点都满足以下规则,对于&nbsp;<code>node.left</code>&nbsp;的任何后代,值总 <code>&lt; node.val</code>,而 <code>node.right</code> 的任何后代,值总 <code>&gt; node.val</code>。此外,前序遍历首先显示节点&nbsp;<code>node</code> 的值,然后遍历 <code>node.left</code>,接着遍历 <code>node.right</code>。)</em></p>
<p>题目保证,对于给定的测试用例,总能找到满足要求的二叉搜索树。</p>
<p>&nbsp;</p>
<p><strong>示例:</strong></p>
<pre><strong>输入:</strong>[8,5,1,7,10,12]
<strong>输出:</strong>[8,5,10,1,7,null,12]
<img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/03/08/1266.png" style="height: 200px; width: 306px;">
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= preorder.length &lt;= 100</code></li>
<li><code>1 &lt;= preorder[i]&nbsp;&lt;= 10^8</code></li>
<li><code>preorder</code> 中的值互不相同</li>
</ul>
<p>每个非负整数&nbsp;<code>N</code>&nbsp;都有其二进制表示。例如,&nbsp;<code>5</code>&nbsp;可以被表示为二进制&nbsp;<code>&quot;101&quot;</code><code>11</code> 可以用二进制&nbsp;<code>&quot;1011&quot;</code>&nbsp;表示,依此类推。注意,除&nbsp;<code>N = 0</code>&nbsp;外,任何二进制表示中都不含前导零。</p>
<p>二进制的反码表示是将每个&nbsp;<code>1</code>&nbsp;改为&nbsp;<code>0</code>&nbsp;且每个&nbsp;<code>0</code>&nbsp;变为&nbsp;<code>1</code>。例如,二进制数&nbsp;<code>&quot;101&quot;</code>&nbsp;的二进制反码为&nbsp;<code>&quot;010&quot;</code></p>
<p>给你一个十进制数&nbsp;<code>N</code>,请你返回其二进制表示的反码所对应的十进制整数。</p>
<p>&nbsp;</p>
<ol>
</ol>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>5
<strong>输出:</strong>2
<strong>解释:</strong>5 的二进制表示为 &quot;101&quot;,其二进制反码为 &quot;010&quot;,也就是十进制中的 2 。
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>7
<strong>输出:</strong>0
<strong>解释:</strong>7 的二进制表示为 &quot;111&quot;,其二进制反码为 &quot;000&quot;,也就是十进制中的 0 。
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>10
<strong>输出:</strong>5
<strong>解释:</strong>10 的二进制表示为 &quot;1010&quot;,其二进制反码为 &quot;0101&quot;,也就是十进制中的 5 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>0 &lt;= N &lt; 10^9</code></li>
<li>本题与 476:<a href="https://leetcode-cn.com/problems/number-complement/">https://leetcode-cn.com/problems/number-complement/</a> 相同</li>
</ol>
<p>在歌曲列表中,第 <code>i</code> 首歌曲的持续时间为 <code>time[i]</code> 秒。</p>
<p>返回其总持续时间(以秒为单位)可被 <code>60</code> 整除的歌曲对的数量。形式上,我们希望索引的数字 <code>i</code><code>j</code> 满足&nbsp; <code>i &lt; j</code> 且有&nbsp;<code>(time[i] + time[j]) % 60 == 0</code></p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>[30,20,150,100,40]
<strong>输出:</strong>3
<strong>解释:</strong>这三对的总持续时间可被 60 整数:
(time[0] = 30, time[2] = 150): 总持续时间 180
(time[1] = 20, time[3] = 100): 总持续时间 120
(time[1] = 20, time[4] = 40): 总持续时间 60
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>[60,60,60]
<strong>输出:</strong>3
<strong>解释:</strong>所有三对的总持续时间都是 120,可以被 60 整数。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= time.length &lt;= 60000</code></li>
<li><code>1 &lt;= time[i] &lt;= 500</code></li>
</ol>
<p>给定一个二叉树,检查它是否是镜像对称的。</p>
<p>&nbsp;</p>
<p>例如,二叉树&nbsp;<code>[1,2,2,3,4,4,3]</code> 是对称的。</p>
<pre> 1
/ \
2 2
/ \ / \
3 4 4 3
</pre>
<p>&nbsp;</p>
<p>但是下面这个&nbsp;<code>[1,2,2,null,3,null,3]</code> 则不是镜像对称的:</p>
<pre> 1
/ \
2 2
\ \
3 3
</pre>
<p>&nbsp;</p>
<p><strong>进阶:</strong></p>
<p>你可以运用递归和迭代两种方法解决这个问题吗?</p>
<p>传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。</p>
<p>传送带上的第 <code>i</code> 个包裹的重量为 <code>weights[i]</code>。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。</p>
<p>返回能在 <code>D</code> 天内将传送带上的所有包裹送达的船的最低运载能力。</p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>weights = [1,2,3,4,5,6,7,8,9,10], D = 5
<strong>输出:</strong>15
<strong>解释:</strong>
船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:
第 1 天:1, 2, 3, 4, 5
第 2 天:6, 7
第 3 天:8
第 4 天:9
第 5 天:10
请注意,货物必须按照给定的顺序装运,因此使用载重能力为 14 的船舶并将包装分成 (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) 是不允许的。
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>weights = [3,2,2,4,1,4], D = 3
<strong>输出:</strong>6
<strong>解释:</strong>
船舶最低载重 6 就能够在 3 天内送达所有包裹,如下所示:
第 1 天:3, 2
第 2 天:2, 4
第 3 天:1, 4
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>weights = [1,2,3,1,1], D = 4
<strong>输出:</strong>3
<strong>解释:</strong>
第 1 天:1
第 2 天:2
第 3 天:3
第 4 天:1, 1
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= D <= weights.length <= 5 * 10<sup>4</sup></code></li>
<li><code>1 <= weights[i] <= 500</code></li>
</ul>
<p>给定正整数&nbsp;<code>N</code>,返回小于等于 <code>N</code>&nbsp;且具有至少 1 位重复数字的正整数的个数。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>20
<strong>输出:</strong>1
<strong>解释:</strong>具有至少 1 位重复数字的正数(&lt;= 20)只有 11 。
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>100
<strong>输出:</strong>10
<strong>解释:</strong>具有至少 1 位重复数字的正数(&lt;= 100)有 11,22,33,44,55,66,77,88,99 和 100 。
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>1000
<strong>输出:</strong>262
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= N &lt;= 10^9</code></li>
</ol>
<p>给你一个整数数组 <code>arr</code>,只有可以将其划分为三个和相等的 <strong>非空</strong> 部分时才返回 <code>true</code>,否则返回 <code>false</code></p>
<p>形式上,如果可以找出索引 <code>i + 1 < j</code> 且满足 <code>(arr[0] + arr[1] + ... + arr[i] == arr[i + 1] + arr[i + 2] + ... + arr[j - 1] == arr[j] + arr[j + 1] + ... + arr[arr.length - 1])</code> 就可以将数组三等分。</p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>arr = [0,2,1,-6,6,-7,9,1,2,0,1]
<strong>输出:</strong>true
<strong>解释:</strong>0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>arr = [0,2,1,-6,6,7,9,-1,2,0,1]
<strong>输出:</strong>false
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>arr = [3,3,6,5,-2,2,5,1,-9,4]
<strong>输出:</strong>true
<strong>解释:</strong>3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>3 <= arr.length <= 5 * 10<sup>4</sup></code></li>
<li><code>-10<sup>4</sup> <= arr[i] <= 10<sup>4</sup></code></li>
</ul>
<p>给你一个正整数数组 <code>values</code>,其中 <code>values[i]</code> 表示第 <code>i</code> 个观光景点的评分,并且两个景点 <code>i</code> 和 <code>j</code> 之间的 <strong>距离</strong> 为 <code>j - i</code></p>
<p>一对景点(<code>i < j</code>)组成的观光组合的得分为 <code>values[i] + values[j] + i - j</code> ,也就是景点的评分之和<strong> 减去 </strong>它们两者之间的距离。</p>
<p>返回一对观光景点能取得的最高分。</p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>values = [8,1,5,2,6]
<strong>输出:</strong>11
<strong>解释:</strong>i = 0, j = 2, values[i] + values[j] + i - j = 8 + 5 + 0 - 2 = 11
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>values = [1,2]
<strong>输出:</strong>2
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 <= values.length <= 5 * 10<sup>4</sup></code></li>
<li><code>1 <= values[i] <= 1000</code></li>
</ul>
<p>给定正整数&nbsp;<code>K</code>,你需要找出可以被 K 整除的、仅包含数字 <strong>1</strong> 的最小正整数 N。</p>
<p>返回&nbsp;<code>N</code>&nbsp;的长度。如果不存在这样的&nbsp;<code>N</code>,就返回 <code>-1</code></p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>1
<strong>输出:</strong>1
<strong>解释:</strong>最小的答案是 N = 1,其长度为 1。</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>2
<strong>输出:</strong>-1
<strong>解释:</strong>不存在可被 2 整除的正整数 N 。</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>3
<strong>输出:</strong>3
<strong>解释:</strong>最小的答案是 N = 111,其长度为 3。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= K &lt;= 10^5</code></li>
</ul>
<p>给定一个二进制字符串&nbsp;<code>S</code>(一个仅由若干&nbsp;&#39;0&#39;&#39;1&#39; 构成的字符串)和一个正整数&nbsp;<code>N</code>,如果对于从 <code>1</code><code>N</code> 的每个整数 <code>X</code>,其二进制表示都是&nbsp;<code>S</code> 的子串,就返回 <code>true</code>,否则返回 <code>false</code></p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>S = &quot;0110&quot;, N = 3
<strong>输出:</strong>true
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>S = &quot;0110&quot;, N = 4
<strong>输出:</strong>false
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= S.length &lt;= 1000</code></li>
<li><code>1 &lt;= N &lt;= 10^9</code></li>
</ol>
<p>给出数字&nbsp;<code>N</code>,返回由若干&nbsp;<code>&quot;0&quot;</code>&nbsp;&nbsp;<code>&quot;1&quot;</code>组成的字符串,该字符串为 <code>N</code>&nbsp;<strong>负二进制(<code>base -2</code></strong>表示。</p>
<p>除非字符串就是&nbsp;<code>&quot;0&quot;</code>,否则返回的字符串中不能含有前导零。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>2
<strong>输出:</strong>&quot;110&quot;
<strong>解释:</strong>(-2) ^ 2 + (-2) ^ 1 = 2
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>3
<strong>输出:</strong>&quot;111&quot;
<strong>解释:</strong>(-2) ^ 2 + (-2) ^ 1 + (-2) ^ 0 = 3
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>4
<strong>输出:</strong>&quot;100&quot;
<strong>解释:</strong>(-2) ^ 2 = 4
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>0 &lt;= N &lt;= 10^9</code></li>
</ol>
<p>给定由若干&nbsp;<code>0</code>&nbsp;&nbsp;<code>1</code>&nbsp;组成的数组 <code>A</code>。我们定义&nbsp;<code>N_i</code>:从&nbsp;<code>A[0]</code>&nbsp;<code>A[i]</code>&nbsp;的第 <code>i</code>&nbsp;个子数组被解释为一个二进制数(从最高有效位到最低有效位)。</p>
<p>返回布尔值列表&nbsp;<code>answer</code>,只有当&nbsp;<code>N_i</code>&nbsp;可以被 <code>5</code>&nbsp;整除时,答案&nbsp;<code>answer[i]</code>&nbsp;<code>true</code>,否则为 <code>false</code></p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>[0,1,1]
<strong>输出:</strong>[true,false,false]
<strong>解释:</strong>
输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有第一个数可以被 5 整除,因此 answer[0] 为真。
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>[1,1,1]
<strong>输出:</strong>[false,false,false]
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>[0,1,1,1,1,1]
<strong>输出:</strong>[true,false,false,false,true,false]
</pre>
<p><strong>示例&nbsp;4:</strong></p>
<pre><strong>输入:</strong>[1,1,1,0,1]
<strong>输出:</strong>[false,false,false,false,false]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= A.length &lt;= 30000</code></li>
<li><code>A[i]</code>&nbsp;<code>0</code>&nbsp;&nbsp;<code>1</code></li>
</ol>
<p>给出一个以头节点&nbsp;<code>head</code>&nbsp;作为第一个节点的链表。链表中的节点分别编号为:<code>node_1, node_2, node_3, ...</code></p>
<p>每个节点都可能有下一个更大值(<em>next larger</em> <strong>value</strong>):对于&nbsp;<code>node_i</code>,如果其&nbsp;<code>next_larger(node_i)</code>&nbsp;&nbsp;<code>node_j.val</code>,那么就有&nbsp;<code>j &gt; i</code>&nbsp;&nbsp;&nbsp;<code>node_j.val &gt; node_i.val</code>,而&nbsp;<code>j</code>&nbsp;是可能的选项中最小的那个。如果不存在这样的&nbsp;<code>j</code>,那么下一个更大值为&nbsp;<code>0</code>&nbsp;</p>
<p>返回整数答案数组&nbsp;<code>answer</code>,其中&nbsp;<code>answer[i] = next_larger(node_{i+1})</code>&nbsp;</p>
<p><strong><em>注意:</em></strong>在下面的示例中,诸如 <code>[2,1,5]</code> 这样的<strong>输入</strong>(不是输出)是链表的序列化表示,其头节点的值为&nbsp;2,第二个节点值为 1,第三个节点值为&nbsp;5 。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>[2,1,5]
<strong>输出:</strong>[5,5,0]
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>[2,7,4,3,5]
<strong>输出:</strong>[7,0,5,5,0]
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>[1,7,5,1,9,2,5,1]
<strong>输出:</strong>[7,9,9,9,0,5,0,0]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li>对于链表中的每个节点,<code>1 &lt;= node.val&nbsp;&lt;= 10^9</code></li>
<li>给定列表的长度在 <code>[0, 10000]</code>&nbsp;范围内</li>
</ol>
<p>给出一个二维数组&nbsp;<code>A</code>,每个单元格为 0(代表海)或 1(代表陆地)。</p>
<p>移动是指在陆地上从一个地方走到另一个地方(朝四个方向之一)或离开网格的边界。</p>
<p>返回网格中<strong>无法</strong>在任意次数的移动中离开网格边界的陆地单元格的数量。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>[[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
<strong>输出:</strong>3
<strong>解释: </strong>
有三个 1 被 0 包围。一个 1 没有被包围,因为它在边界上。</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>[[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]]
<strong>输出:</strong>0
<strong>解释:</strong>
所有 1 都在边界上或可以到达边界。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= A.length &lt;= 500</code></li>
<li><code>1 &lt;= A[i].length &lt;= 500</code></li>
<li><code>0 &lt;= A[i][j] &lt;= 1</code></li>
<li>所有行的大小都相同</li>
</ol>
<p>给你一个二叉树,请你返回其按 <strong>层序遍历</strong> 得到的节点值。 (即逐层地,从左到右访问所有节点)。</p>
<p> </p>
<p><strong>示例:</strong><br />
二叉树:<code>[3,9,20,null,null,15,7]</code>,</p>
<pre>
3
/ \
9 20
/ \
15 7
</pre>
<p>返回其层序遍历结果:</p>
<pre>
[
[3],
[9,20],
[15,7]
]
</pre>
<p>有效括号字符串为空 <code>""</code><code>"(" + A + ")"</code> 或 <code>A + B</code> ,其中 <code>A</code> 和 <code>B</code> 都是有效的括号字符串,<code>+</code> 代表字符串的连接。</p>
<ul>
<li>例如,<code>""</code><code>"()"</code><code>"(())()"</code> 和 <code>"(()(()))"</code> 都是有效的括号字符串。</li>
</ul>
<p>如果有效字符串 <code>s</code> 非空,且不存在将其拆分为 <code>s = A + B</code> 的方法,我们称其为<strong>原语(primitive)</strong>,其中 <code>A</code> 和 <code>B</code> 都是非空有效括号字符串。</p>
<p>给出一个非空有效字符串 <code>s</code>,考虑将其进行原语化分解,使得:<code>s = P_1 + P_2 + ... + P_k</code>,其中 <code>P_i</code> 是有效括号字符串原语。</p>
<p><code>s</code> 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 <code>s</code></p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>s = "(()())(())"
<strong>输出:</strong>"()()()"
<strong>解释:
</strong>输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())",
删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>s = "(()())(())(()(()))"
<strong>输出:</strong>"()()()()(())"
<strong>解释:</strong>
输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))",
删除每个部分中的最外层括号后得到 "()()" + "()" + "()(())" = "()()()()(())"。
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>s = "()()"
<strong>输出:</strong>""
<strong>解释:</strong>
输入字符串为 "()()",原语化分解得到 "()" + "()",
删除每个部分中的最外层括号后得到 "" + "" = ""。
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= s.length <= 10<sup>5</sup></code></li>
<li><code>s[i]</code><code>'('</code><code>')'</code></li>
<li><code>s</code> 是一个有效括号字符串</li>
</ul>
<p>给出一棵二叉树,其上每个结点的值都是 <code>0</code> 或 <code>1</code> 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 <code>0 -> 1 -> 1 -> 0 -> 1</code>,那么它表示二进制数 <code>01101</code>,也就是 <code>13</code> 。</p>
<p>对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。</p>
<p>返回这些数字之和。题目数据保证答案是一个 <strong>32 位 </strong>整数。</p>
<p> </p>
<p><strong>示例 1:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2019/04/04/sum-of-root-to-leaf-binary-numbers.png" style="width: 450px; height: 296px;" />
<pre>
<strong>输入:</strong>root = [1,0,1,0,1,0,1]
<strong>输出:</strong>22
<strong>解释:</strong>(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>root = [0]
<strong>输出:</strong>0
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>root = [1]
<strong>输出:</strong>1
</pre>
<p><strong>示例 4:</strong></p>
<pre>
<strong>输入:</strong>root = [1,1]
<strong>输出:</strong>3
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li>树中的结点数介于 <code>1</code><code>1000</code> 之间。</li>
<li><code>Node.val</code><code>0</code><code>1</code></li>
</ul>
<p>如果我们可以将<strong>小写字母</strong>插入模式串&nbsp;<code>pattern</code>&nbsp;得到待查询项&nbsp;<code>query</code>,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。)</p>
<p>给定待查询列表&nbsp;<code>queries</code>,和模式串&nbsp;<code>pattern</code>,返回由布尔值组成的答案列表&nbsp;<code>answer</code>。只有在待查项&nbsp;<code>queries[i]</code> 与模式串&nbsp;<code>pattern</code> 匹配时,&nbsp;<code>answer[i]</code>&nbsp;才为 <code>true</code>,否则为 <code>false</code></p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>queries = [&quot;FooBar&quot;,&quot;FooBarTest&quot;,&quot;FootBall&quot;,&quot;FrameBuffer&quot;,&quot;ForceFeedBack&quot;], pattern = &quot;FB&quot;
<strong>输出:</strong>[true,false,true,true,false]
<strong>示例:</strong>
&quot;FooBar&quot; 可以这样生成:&quot;F&quot; + &quot;oo&quot; + &quot;B&quot; + &quot;ar&quot;
&quot;FootBall&quot; 可以这样生成:&quot;F&quot; + &quot;oot&quot; + &quot;B&quot; + &quot;all&quot;.
&quot;FrameBuffer&quot; 可以这样生成:&quot;F&quot; + &quot;rame&quot; + &quot;B&quot; + &quot;uffer&quot;.</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>queries = [&quot;FooBar&quot;,&quot;FooBarTest&quot;,&quot;FootBall&quot;,&quot;FrameBuffer&quot;,&quot;ForceFeedBack&quot;], pattern = &quot;FoBa&quot;
<strong>输出:</strong>[true,false,true,false,false]
<strong>解释:</strong>
&quot;FooBar&quot; 可以这样生成:&quot;Fo&quot; + &quot;o&quot; + &quot;Ba&quot; + &quot;r&quot;.
&quot;FootBall&quot; 可以这样生成:&quot;Fo&quot; + &quot;ot&quot; + &quot;Ba&quot; + &quot;ll&quot;.
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输出:</strong>queries = [&quot;FooBar&quot;,&quot;FooBarTest&quot;,&quot;FootBall&quot;,&quot;FrameBuffer&quot;,&quot;ForceFeedBack&quot;], pattern = &quot;FoBaT&quot;
<strong>输入:</strong>[false,true,false,false,false]
<strong>解释: </strong>
&quot;FooBarTest&quot; 可以这样生成:&quot;Fo&quot; + &quot;o&quot; + &quot;Ba&quot; + &quot;r&quot; + &quot;T&quot; + &quot;est&quot;.
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= queries.length &lt;= 100</code></li>
<li><code>1 &lt;= queries[i].length &lt;= 100</code></li>
<li><code>1 &lt;= pattern.length &lt;= 100</code></li>
<li>所有字符串都仅由大写和小写英文字母组成。</li>
</ol>
<p>你将会获得一系列视频片段,这些片段来自于一项持续时长为 <code>T</code> 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。</p>
<p>视频片段 <code>clips[i]</code> 都用区间进行表示:开始于 <code>clips[i][0]</code> 并于 <code>clips[i][1]</code> 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 <code>[0, 7]</code> 可以剪切成 <code>[0, 1] + [1, 3] + [3, 7]</code> 三部分。</p>
<p>我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段(<code>[0, T]</code>)。返回所需片段的最小数目,如果无法完成该任务,则返回 <code>-1</code></p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>clips = [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], T = 10
<strong>输出:</strong>3
<strong>解释:</strong>
我们选中 [0,2], [8,10], [1,9] 这三个片段。
然后,按下面的方案重制比赛片段:
将 [1,9] 再剪辑为 [1,2] + [2,8] + [8,9] 。
现在我们手上有 [0,2] + [2,8] + [8,10],而这些涵盖了整场比赛 [0, 10]。
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>clips = [[0,1],[1,2]], T = 5
<strong>输出:</strong>-1
<strong>解释:</strong>
我们无法只用 [0,1] 和 [1,2] 覆盖 [0,5] 的整个过程。
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>clips = [[0,1],[6,8],[0,2],[5,6],[0,4],[0,3],[6,7],[1,3],[4,7],[1,4],[2,5],[2,6],[3,4],[4,5],[5,7],[6,9]], T = 9
<strong>输出:</strong>3
<strong>解释: </strong>
我们选取片段 [0,4], [4,7] 和 [6,9] 。
</pre>
<p><strong>示例 4:</strong></p>
<pre>
<strong>输入:</strong>clips = [[0,4],[2,8]], T = 5
<strong>输出:</strong>2
<strong>解释:</strong>
注意,你可能录制超过比赛结束时间的视频。
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= clips.length <= 100</code></li>
<li><code>0 <= clips[i][0] <= clips[i][1] <= 100</code></li>
<li><code>0 <= T <= 100</code></li>
</ul>
<p>爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。</p>
<p>最初,黑板上有一个数字&nbsp;<code>N</code>&nbsp;。在每个玩家的回合,玩家需要执行以下操作:</p>
<ul>
<li>选出任一&nbsp;<code>x</code>,满足&nbsp;<code>0 &lt; x &lt; N</code>&nbsp;<code>N % x == 0</code>&nbsp;</li>
<li><code>N - x</code>&nbsp;替换黑板上的数字 <code>N</code></li>
</ul>
<p>如果玩家无法执行这些操作,就会输掉游戏。</p>
<p>只有在爱丽丝在游戏中取得胜利时才返回&nbsp;<code>True</code>,否则返回 <code>False</code>。假设两个玩家都以最佳状态参与游戏。</p>
<p>&nbsp;</p>
<ol>
</ol>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>2
<strong>输出:</strong>true
<strong>解释:</strong>爱丽丝选择 1,鲍勃无法进行操作。
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>3
<strong>输出:</strong>false
<strong>解释:</strong>爱丽丝选择 1,鲍勃也选择 1,然后爱丽丝无法进行操作。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= N &lt;= 1000</code></li>
</ol>
<p>给定二叉树的根节点 <code>root</code>,找出存在于 <strong>不同</strong> 节点 <code>A</code> 和 <code>B</code> 之间的最大值 <code>V</code>,其中 <code>V = |A.val - B.val|</code>,且 <code>A</code> 是 <code>B</code> 的祖先。</p>
<p>(如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)</p>
<p> </p>
<p><strong>示例 1:</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2020/11/09/tmp-tree.jpg" style="width: 400px; height: 390px;" /></p>
<pre>
<strong>输入:</strong>root = [8,3,10,1,6,null,14,null,null,4,7,13]
<strong>输出:</strong>7
<strong>解释: </strong>
我们有大量的节点与其祖先的差值,其中一些如下:
|8 - 3| = 5
|3 - 7| = 4
|8 - 1| = 7
|10 - 13| = 3
在所有可能的差值中,最大值 7 由 |8 - 1| = 7 得出。
</pre>
<p><strong>示例 2:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/11/09/tmp-tree-1.jpg" style="width: 250px; height: 349px;" />
<pre>
<strong>输入:</strong>root = [1,null,2,null,0,3]
<strong>输出:</strong>3
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li>树中的节点数在 <code>2</code> 到 <code>5000</code> 之间。</li>
<li><code>0 <= Node.val <= 10<sup>5</sup></code></li>
</ul>
<p>给定一个整数数组&nbsp;<code>A</code>,返回 <code>A</code>&nbsp;中最长等差子序列的<strong>长度</strong></p>
<p>回想一下,<code>A</code>&nbsp;的子序列是列表&nbsp;<code>A[i_1], A[i_2], ..., A[i_k]</code> 其中&nbsp;<code>0 &lt;= i_1 &lt; i_2 &lt; ... &lt; i_k &lt;= A.length - 1</code>。并且如果&nbsp;<code>B[i+1] - B[i]</code>(&nbsp;<code>0 &lt;= i &lt; B.length - 1</code>) 的值都相同,那么序列&nbsp;<code>B</code>&nbsp;是等差的。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>[3,6,9,12]
<strong>输出:</strong>4
<strong>解释: </strong>
整个数组是公差为 3 的等差数列。
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>[9,4,7,2,10]
<strong>输出:</strong>3
<strong>解释:</strong>
最长的等差子序列是 [4,7,10]。
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>[20,1,15,3,10,5,8]
<strong>输出:</strong>4
<strong>解释:</strong>
最长的等差子序列是 [20,15,10,5]。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>2 &lt;= A.length &lt;= 2000</code></li>
<li><code>0 &lt;= A[i] &lt;= 10000</code></li>
</ol>
<p>我们从二叉树的根节点 <code>root</code>&nbsp;开始进行深度优先搜索。</p>
<p>在遍历中的每个节点处,我们输出&nbsp;<code>D</code>&nbsp;条短划线(其中&nbsp;<code>D</code>&nbsp;是该节点的深度),然后输出该节点的值。(<em>如果节点的深度为 <code>D</code>,则其直接子节点的深度为 <code>D + 1</code>。根节点的深度为 <code>0</code>)。</em></p>
<p>如果节点只有一个子节点,那么保证该子节点为左子节点。</p>
<p>给出遍历输出&nbsp;<code>S</code>,还原树并返回其根节点&nbsp;<code>root</code></p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<p><strong><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/04/12/recover-a-tree-from-preorder-traversal.png" style="height: 200px; width: 320px;"></strong></p>
<pre><strong>输入:</strong>&quot;1-2--3--4-5--6--7&quot;
<strong>输出:</strong>[1,2,5,3,4,6,7]
</pre>
<p><strong>示例 2:</strong></p>
<p><strong><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/04/12/screen-shot-2019-04-10-at-114101-pm.png" style="height: 250px; width: 256px;"></strong></p>
<pre><strong>输入:</strong>&quot;1-2--3---4-5--6---7&quot;
<strong>输出:</strong>[1,2,5,3,null,6,null,4,null,7]
</pre>
<p><strong>示例 3:</strong></p>
<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/04/12/screen-shot-2019-04-10-at-114955-pm.png" style="height: 250px; width: 276px;"></p>
<pre><strong>输入:</strong>&quot;1-401--349---90--88&quot;
<strong>输出:</strong>[1,401,null,349,88,90]
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li>原始树中的节点数介于 <code>1</code><code>1000</code> 之间。</li>
<li>每个节点的值介于 <code>1</code><code>10 ^ 9</code> 之间。</li>
</ul>
<p>公司计划面试 <code>2n</code> 人。给你一个数组 <code>costs</code> ,其中 <code>costs[i] = [aCost<sub>i</sub>, bCost<sub>i</sub>]</code> 。第 <code>i</code> 人飞往 <code>a</code> 市的费用为 <code>aCost<sub>i</sub></code> ,飞往 <code>b</code> 市的费用为 <code>bCost<sub>i</sub></code></p>
<p>返回将每个人都飞到 <code>a</code><code>b</code> 中某座城市的最低费用,要求每个城市都有 <code>n</code> 人抵达<strong></strong></p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>costs = [[10,20],[30,200],[400,50],[30,20]]
<strong>输出:</strong>110
<strong>解释:</strong>
第一个人去 a 市,费用为 10。
第二个人去 a 市,费用为 30。
第三个人去 b 市,费用为 50。
第四个人去 b 市,费用为 20。
最低总费用为 10 + 30 + 50 + 20 = 110,每个城市都有一半的人在面试。
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>costs = [[259,770],[448,54],[926,667],[184,139],[840,118],[577,469]]
<strong>输出:</strong>1859
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>costs = [[515,563],[451,713],[537,709],[343,819],[855,779],[457,60],[650,359],[631,42]]
<strong>输出:</strong>3086
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 * n == costs.length</code></li>
<li><code>2 <= costs.length <= 100</code></li>
<li><code>costs.length</code> 为偶数</li>
<li><code>1 <= aCost<sub>i</sub>, bCost<sub>i</sub> <= 1000</code></li>
</ul>
<p>给出 <code>R</code><code>C</code> 列的矩阵,其中的单元格的整数坐标为 <code>(r, c)</code>,满足 <code>0 &lt;= r &lt; R</code><code>0 &lt;= c &lt; C</code></p>
<p>另外,我们在该矩阵中给出了一个坐标为&nbsp;<code>(r0, c0)</code> 的单元格。</p>
<p>返回矩阵中的所有单元格的坐标,并按到 <code>(r0, c0)</code> 的距离从最小到最大的顺序排,其中,两单元格<code>(r1, c1)</code><code>(r2, c2)</code> 之间的距离是曼哈顿距离,<code>|r1 - r2| + |c1 - c2|</code>。(你可以按任何满足此条件的顺序返回答案。)</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>R = 1, C = 2, r0 = 0, c0 = 0
<strong>输出:</strong>[[0,0],[0,1]]
<strong>解释</strong>:从 (r0, c0) 到其他单元格的距离为:[0,1]
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>R = 2, C = 2, r0 = 0, c0 = 1
<strong>输出:</strong>[[0,1],[0,0],[1,1],[1,0]]
<strong>解释</strong>:从 (r0, c0) 到其他单元格的距离为:[0,1,1,2]
[[0,1],[1,1],[0,0],[1,0]] 也会被视作正确答案。
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>R = 2, C = 3, r0 = 1, c0 = 2
<strong>输出:</strong>[[1,2],[0,2],[1,1],[0,1],[1,0],[0,0]]
<strong>解释</strong>:从 (r0, c0) 到其他单元格的距离为:[0,1,1,2,2,3]
其他满足题目要求的答案也会被视为正确,例如 [[1,2],[1,1],[0,2],[1,0],[0,1],[0,0]]。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= R &lt;= 100</code></li>
<li><code>1 &lt;= C &lt;= 100</code></li>
<li><code>0 &lt;= r0 &lt; R</code></li>
<li><code>0 &lt;= c0 &lt; C</code></li>
</ol>
<p>给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。</p>
<p>例如:<br />
给定二叉树 <code>[3,9,20,null,null,15,7]</code>,</p>
<pre>
3
/ \
9 20
/ \
15 7
</pre>
<p>返回锯齿形层序遍历如下:</p>
<pre>
[
[3],
[20,9],
[15,7]
]
</pre>
<p>给出非负整数数组 <code>A</code> ,返回两个非重叠(连续)子数组中元素的最大和,子数组的长度分别为 <code>L</code><code>M</code>。(这里需要澄清的是,长为 L 的子数组可以出现在长为 M 的子数组之前或之后。)</p>
<p>从形式上看,返回最大的 <code>V</code>,而 <code>V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1])</code> 并满足下列条件之一:</p>
<p>&nbsp;</p>
<ul>
<li><code>0 &lt;= i &lt; i + L - 1 &lt; j &lt; j + M - 1 &lt; A.length</code>, <strong></strong></li>
<li><code>0 &lt;= j &lt; j + M - 1 &lt; i &lt; i + L - 1 &lt; A.length</code>.</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>A = [0,6,5,2,2,5,1,9,4], L = 1, M = 2
<strong>输出:</strong>20
<strong>解释:</strong>子数组的一种选择中,[9] 长度为 1,[6,5] 长度为 2。
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>A = [3,8,1,3,2,1,8,9,0], L = 3, M = 2
<strong>输出:</strong>29
<strong>解释:</strong>子数组的一种选择中,[3,8,1] 长度为 3,[8,9] 长度为 2。
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>A = [2,1,5,6,0,9,5,0,3,8], L = 4, M = 3
<strong>输出:</strong>31
<strong>解释:</strong>子数组的一种选择中,[5,6,0,9] 长度为 4,[0,3,8] 长度为 3。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>L &gt;= 1</code></li>
<li><code>M &gt;= 1</code></li>
<li><code>L + M &lt;= A.length &lt;= 1000</code></li>
<li><code>0 &lt;= A[i] &lt;= 1000</code></li>
</ol>
<p>按下述要求实现 <code>StreamChecker</code> 类:</p>
<ul>
<li><code>StreamChecker(words)</code>:构造函数,用给定的字词初始化数据结构。</li>
<li><code>query(letter)</code>:如果存在某些 <code>k &gt;= 1</code>,可以用查询的最后 <code>k</code>个字符(按从旧到新顺序,包括刚刚查询的字母)拼写出给定字词表中的某一字词时,返回 <code>true</code>。否则,返回 <code>false</code></li>
</ul>
<p>&nbsp;</p>
<p><strong>示例:</strong></p>
<pre>StreamChecker streamChecker = new StreamChecker([&quot;cd&quot;,&quot;f&quot;,&quot;kl&quot;]); // 初始化字典
streamChecker.query(&#39;a&#39;); // 返回 false
streamChecker.query(&#39;b&#39;); // 返回 false
streamChecker.query(&#39;c&#39;); // 返回 false
streamChecker.query(&#39;d&#39;); // 返回 true,因为 &#39;cd&#39; 在字词表中
streamChecker.query(&#39;e&#39;); // 返回 false
streamChecker.query(&#39;f&#39;); // 返回 true,因为 &#39;f&#39; 在字词表中
streamChecker.query(&#39;g&#39;); // 返回 false
streamChecker.query(&#39;h&#39;); // 返回 false
streamChecker.query(&#39;i&#39;); // 返回 false
streamChecker.query(&#39;j&#39;); // 返回 false
streamChecker.query(&#39;k&#39;); // 返回 false
streamChecker.query(&#39;l&#39;); // 返回 true,因为 &#39;kl&#39; 在字词表中。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= words.length &lt;= 2000</code></li>
<li><code>1 &lt;= words[i].length &lt;= 2000</code></li>
<li>字词只包含小写英文字母。</li>
<li>待查项只包含小写英文字母。</li>
<li>待查项最多 40000 个。</li>
</ul>
<p>三枚石子放置在数轴上,位置分别为 <code>a</code><code>b</code><code>c</code></p>
<p>每一回合,你可以从两端之一拿起一枚石子(位置最大或最小),并将其放入两端之间的任一空闲位置。形式上,假设这三枚石子当前分别位于位置 <code>x, y, z</code><code>x < y < z</code>。那么就可以从位置 <code>x</code> 或者是位置 <code>z</code> 拿起一枚石子,并将该石子移动到某一整数位置 <code>k</code> 处,其中 <code>x < k < z</code><code>k != y</code></p>
<p>当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。</p>
<p>要使游戏结束,你可以执行的最小和最大移动次数分别是多少? 以长度为 2 的数组形式返回答案:<code>answer = [minimum_moves, maximum_moves]</code></p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>a = 1, b = 2, c = 5
<strong>输出:</strong>[1, 2]
<strong>解释:</strong>将石子从 5 移动到 4 再移动到 3,或者我们可以直接将石子移动到 3。
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>a = 4, b = 3, c = 2
<strong>输出:</strong>[0, 0]
<strong>解释:</strong>我们无法进行任何移动。
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 <= a <= 100</code></li>
<li><code>1 <= b <= 100</code></li>
<li><code>1 <= c <= 100</code></li>
<li><code>a != b, b != c, c != a</code></li>
</ol>
<p>给出一个二维整数网格&nbsp;<code>grid</code>,网格中的每个值表示该位置处的网格块的颜色。</p>
<p>只有当两个网格块的颜色相同,而且在四个方向中任意一个方向上相邻时,它们属于同一<strong>连通分量</strong></p>
<p>连通分量的<strong>边界</strong>是指连通分量中的所有与不在分量中的正方形相邻(四个方向上)的所有正方形,或者在网格的边界上(第一行/列或最后一行/列)的所有正方形。</p>
<p>给出位于&nbsp;<code>(r0, c0)</code>&nbsp;的网格块和颜色&nbsp;<code>color</code>,使用指定颜色&nbsp;<code>color</code>&nbsp;为所给网格块的连通分量的边界进行着色,并返回最终的网格&nbsp;<code>grid</code></p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>grid = [[1,1],[1,2]], r0 = 0, c0 = 0, color = 3
<strong>输出:</strong>[[3, 3], [3, 2]]
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>grid = [[1,2,2],[2,3,2]], r0 = 0, c0 = 1, color = 3
<strong>输出:</strong>[[1, 3, 3], [2, 3, 3]]
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>grid = [[1,1,1],[1,1,1],[1,1,1]], r0 = 1, c0 = 1, color = 2
<strong>输出:</strong>[[2, 2, 2], [2, 1, 2], [2, 2, 2]]</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>1 &lt;= grid.length &lt;= 50</code></li>
<li><code>1 &lt;= grid[0].length &lt;= 50</code></li>
<li><code>1 &lt;= grid[i][j] &lt;= 1000</code></li>
<li><code>0 &lt;= r0 &lt; grid.length</code></li>
<li><code>0 &lt;= c0 &lt; grid[0].length</code></li>
<li><code>1 &lt;= color &lt;= 1000</code></li>
</ol>
<p>&nbsp;</p>
<p>在两条独立的水平线上按给定的顺序写下 <code>nums1</code><code>nums2</code> 中的整数。</p>
<p>现在,可以绘制一些连接两个数字 <code>nums1[i]</code> 和 <code>nums2[j]</code> 的直线,这些直线需要同时满足满足:</p>
<ul>
<li> <code>nums1[i] == nums2[j]</code></li>
<li>且绘制的直线不与任何其他连线(非水平线)相交。</li>
</ul>
<p>请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。</p>
<p>以这种方法绘制线条,并返回可以绘制的最大连线数。</p>
<p> </p>
<p><strong>示例 1:</strong></p>
<strong><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/04/28/142.png" style="height: 72px; width: 100px;" /></strong>
<pre>
<strong>输入:</strong>nums1 = <span id="example-input-1-1">[1,4,2]</span>, nums2 = <span id="example-input-1-2">[1,2,4]</span>
<strong>输出:</strong><span id="example-output-1">2</span>
<strong>解释:</strong>可以画出两条不交叉的线,如上图所示。
但无法画出第三条不相交的直线,因为从 nums1[1]=4 到 nums2[2]=4 的直线将与从 nums1[2]=2 到 nums2[1]=2 的直线相交。
</pre>
<div>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>nums1 = <span id="example-input-2-1">[2,5,1,2,5]</span>, nums2 = <span id="example-input-2-2">[10,5,2,1,5,2]</span>
<strong>输出:</strong><span id="example-output-2">3</span>
</pre>
<div>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>nums1 = <span id="example-input-3-1">[1,3,7,1,7,5]</span>, nums2 = <span id="example-input-3-2">[1,9,2,5,1]</span>
<strong>输出:</strong><span id="example-output-3">2</span></pre>
<p> </p>
</div>
</div>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= nums1.length <= 500</code></li>
<li><code>1 <= nums2.length <= 500</code></li>
<li><code><font face="monospace">1 <= nums1[i], nums2[i] <= 2000</font></code></li>
</ul>
<p> </p>
<p>在一个 10<sup>6</sup> x 10<sup>6</sup> 的网格中,每个网格上方格的坐标为 <code>(x, y)</code></p>
<p>现在从源方格 <code>source = [s<sub>x</sub>, s<sub>y</sub>]</code> 开始出发,意图赶往目标方格 <code>target = [t<sub>x</sub>, t<sub>y</sub>]</code> 。数组 <code>blocked</code> 是封锁的方格列表,其中每个 <code>blocked[i] = [x<sub>i</sub>, y<sub>i</sub>]</code> 表示坐标为 <code>(x<sub>i</sub>, y<sub>i</sub>)</code> 的方格是禁止通行的。</p>
<p>每次移动,都可以走到网格中在四个方向上相邻的方格,只要该方格 <strong></strong> 在给出的封锁列表 <code>blocked</code> 上。同时,不允许走出网格。</p>
<p>只有在可以通过一系列的移动从源方格 <code>source</code> 到达目标方格 <code>target</code> 时才返回 <code>true</code>。否则,返回 <code>false</code></p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>blocked = [[0,1],[1,0]], source = [0,0], target = [0,2]
<strong>输出:</strong>false
<strong>解释:</strong>
从源方格无法到达目标方格,因为我们无法在网格中移动。
无法向北或者向东移动是因为方格禁止通行。
无法向南或者向西移动是因为不能走出网格。</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>blocked = [], source = [0,0], target = [999999,999999]
<strong>输出:</strong>true
<strong>解释:</strong>
因为没有方格被封锁,所以一定可以到达目标方格。
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>0 <= blocked.length <= 200</code></li>
<li><code>blocked[i].length == 2</code></li>
<li><code>0 <= x<sub>i</sub>, y<sub>i</sub> < 10<sup>6</sup></code></li>
<li><code>source.length == target.length == 2</code></li>
<li><code>0 <= s<sub>x</sub>, s<sub>y</sub>, t<sub>x</sub>, t<sub>y</sub> < 10<sup>6</sup></code></li>
<li><code>source != target</code></li>
<li>题目数据保证 <code>source</code><code>target</code> 不在封锁列表内</li>
</ul>
<p>回旋镖定义为一组三个点,这些点各不相同且<strong></strong>在一条直线上。</p>
<p>给出平面上三个点组成的列表,判断这些点是否可以构成回旋镖。</p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>[[1,1],[2,3],[3,2]]
<strong>输出:</strong>true
</pre>
<p><strong>示例 2:</strong></p>
<pre><strong>输入:</strong>[[1,1],[2,2],[3,3]]
<strong>输出:</strong>false</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>points.length == 3</code></li>
<li><code>points[i].length == 2</code></li>
<li><code>0 &lt;= points[i][j] &lt;= 100</code></li>
</ol>
<p><span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">给定一个二叉搜索树,请将它的每个</font></span></span></span></span>节点<span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">的值替换成树中大于或者等于该</font></span></span></span></span>节点<span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">值的所有</font></span></span></span></span>节点<span style="font-size:10.5pt"><span style="font-family:Calibri"><span style="font-size:10.5000pt"><span style="font-family:宋体"><font face="宋体">值之和。</font></span></span></span></span></p>
<p>提醒一下,二叉搜索树满足下列约束条件:</p>
<ul>
<li>节点的左子树仅包含键<strong> 小于 </strong>节点键的节点。</li>
<li>节点的右子树仅包含键<strong> 大于</strong> 节点键的节点。</li>
<li>左右子树也必须是二叉搜索树。</li>
</ul>
<p><strong>注意:</strong>该题目与 538: <a href="https://leetcode-cn.com/problems/convert-bst-to-greater-tree/">https://leetcode-cn.com/problems/convert-bst-to-greater-tree/  </a>相同</p>
<p> </p>
<p><strong>示例 1:</strong></p>
<p><strong><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/05/03/tree.png" style="height: 364px; width: 534px;" /></strong></p>
<pre>
<strong>输入:</strong>[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
<strong>输出:</strong>[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>root = [0,null,1]
<strong>输出:</strong>[1,null,1]
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>root = [1,0,2]
<strong>输出:</strong>[3,3,2]
</pre>
<p><strong>示例 4:</strong></p>
<pre>
<strong>输入:</strong>root = [3,2,4,1]
<strong>输出:</strong>[7,9,4,10]
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li>树中的节点数介于 <code>1</code><code>100</code> 之间。</li>
<li>每个节点的值介于 <code>0</code> 和 <code>100</code> 之间。</li>
<li>树中的所有值 <strong>互不相同</strong></li>
<li>给定的树为二叉搜索树。</li>
</ul>
<p>给定&nbsp;<code>N</code>,想象一个凸&nbsp;<code>N</code>&nbsp;边多边形,其顶点按顺时针顺序依次标记为&nbsp;<code>A[0], A[i], ..., A[N-1]</code></p>
<p>假设您将多边形剖分为 <code>N-2</code> 个三角形。对于每个三角形,该三角形的值是顶点标记的<strong>乘积</strong>,三角剖分的分数是进行三角剖分后所有 <code>N-2</code> 个三角形的值之和。</p>
<p>返回多边形进行三角剖分后可以得到的最低分。<br>
&nbsp;</p>
<ol>
</ol>
<p><strong>示例 1:</strong></p>
<pre><strong>输入:</strong>[1,2,3]
<strong>输出:</strong>6
<strong>解释:</strong>多边形已经三角化,唯一三角形的分数为 6。
</pre>
<p><strong>示例 2:</strong></p>
<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/05/03/minimum-score-triangulation-of-polygon-1.png" style="height: 150px; width: 253px;"></p>
<pre><strong>输入:</strong>[3,7,4,5]
<strong>输出:</strong>144
<strong>解释:</strong>有两种三角剖分,可能得分分别为:3*7*5 + 4*5*7 = 245,或 3*4*5 + 3*4*7 = 144。最低分数为 144。
</pre>
<p><strong>示例 3:</strong></p>
<pre><strong>输入:</strong>[1,3,1,4,1,5]
<strong>输出:</strong>13
<strong>解释:</strong>最低分数三角剖分的得分情况为 1*1*3 + 1*1*4 + 1*1*5 + 1*1*1 = 13。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ol>
<li><code>3 &lt;= A.length &lt;= 50</code></li>
<li><code>1 &lt;= A[i] &lt;= 100</code></li>
</ol>
<p>在一个长度 <strong>无限 </strong>的数轴上,第 <code>i</code> 颗石子的位置为 <code>stones[i]</code>。如果一颗石子的位置最小/最大,那么该石子被称作 <strong>端点石子 </strong></p>
<p>每个回合,你可以将一颗端点石子拿起并移动到一个未占用的位置,使得该石子不再是一颗端点石子。</p>
<p>值得注意的是,如果石子像 <code>stones = [1,2,5]</code> 这样,你将 <strong>无法 </strong>移动位于位置 5 的端点石子,因为无论将它移动到任何位置(例如 0 或 3),该石子都仍然会是端点石子。</p>
<p>当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。</p>
<p>要使游戏结束,你可以执行的最小和最大移动次数分别是多少? 以长度为 2 的数组形式返回答案:<code>answer = [minimum_moves, maximum_moves]</code></p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>[7,4,9]
<strong>输出:</strong>[1,2]
<strong>解释:</strong>
我们可以移动一次,4 -> 8,游戏结束。
或者,我们可以移动两次 9 -> 5,4 -> 6,游戏结束。
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>[6,5,4,3,10]
<strong>输出:</strong>[2,3]
<strong>解释:</strong>
我们可以移动 3 -> 8,接着是 10 -> 7,游戏结束。
或者,我们可以移动 3 -> 7, 4 -> 8, 5 -> 9,游戏结束。
注意,我们无法进行 10 -> 2 这样的移动来结束游戏,因为这是不合要求的移动。
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>[100,101,104,102,103]
<strong>输出:</strong>[0,0]</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>3 <= stones.length <= 10^4</code></li>
<li><code>1 <= stones[i] <= 10^9</code></li>
<li><code>stones[i]</code> 的值各不相同。</li>
</ul>
<p> </p>
<p>给定一个二叉树,找出其最大深度。</p>
<p>二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。</p>
<p><strong>说明:</strong>&nbsp;叶子节点是指没有子节点的节点。</p>
<p><strong>示例:</strong><br>
给定二叉树 <code>[3,9,20,null,null,15,7]</code></p>
<pre> 3
/ \
9 20
/ \
15 7</pre>
<p>返回它的最大深度&nbsp;3 。</p>
<p>有一堆石头,用整数数组 <code>stones</code> 表示。其中 <code>stones[i]</code> 表示第 <code>i</code> 块石头的重量。</p>
<p>每一回合,从中选出<strong>任意两块石头</strong>,然后将它们一起粉碎。假设石头的重量分别为 <code>x</code> 和 <code>y</code>,且 <code>x <= y</code>。那么粉碎的可能结果如下:</p>
<ul>
<li>如果 <code>x == y</code>,那么两块石头都会被完全粉碎;</li>
<li>如果 <code>x != y</code>,那么重量为 <code>x</code> 的石头将会完全粉碎,而重量为 <code>y</code> 的石头新重量为 <code>y-x</code></li>
</ul>
<p>最后,<strong>最多只会剩下一块 </strong>石头。返回此石头 <strong>最小的可能重量 </strong>。如果没有石头剩下,就返回 <code>0</code></p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>stones = [2,7,4,1,8,1]
<strong>输出:</strong>1
<strong>解释:</strong>
组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],
组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],
组合 2 和 1,得到 1,所以数组转化为 [1,1,1],
组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>stones = [31,26,33,21,40]
<strong>输出:</strong>5
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>stones = [1,2]
<strong>输出:</strong>1
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= stones.length <= 30</code></li>
<li><code>1 <= stones[i] <= 100</code></li>
</ul>
<p>给定一棵树的前序遍历 <code>preorder</code> 与中序遍历  <code>inorder</code>。请构造二叉树并返回其根节点。</p>
<p> </p>
<p><strong>示例 1:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2021/02/19/tree.jpg" />
<pre>
<strong>Input:</strong> preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
<strong>Output:</strong> [3,9,20,null,null,15,7]
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>Input:</strong> preorder = [-1], inorder = [-1]
<strong>Output:</strong> [-1]
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 <= preorder.length <= 3000</code></li>
<li><code>inorder.length == preorder.length</code></li>
<li><code>-3000 <= preorder[i], inorder[i] <= 3000</code></li>
<li><code>preorder</code> 和 <code>inorder</code> 均无重复元素</li>
<li><code>inorder</code> 均出现在 <code>preorder</code></li>
<li><code>preorder</code> 保证为二叉树的前序遍历序列</li>
<li><code>inorder</code> 保证为二叉树的中序遍历序列</li>
</ul>
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册