1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-09-05 07:21:40 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
This commit is contained in:
2022-10-20 22:28:17 +08:00
parent a38bcc80d1
commit 396e839079
45 changed files with 16318 additions and 11993 deletions

View File

@@ -0,0 +1,39 @@
<p>给你一个 <strong>不包含</strong> 任何零的整数数组 <code>nums</code> ,找出自身与对应的负数都在数组中存在的最大正整数 <code>k</code></p>
<p>返回正整数<em> </em><code>k</code> ,如果不存在这样的整数,返回 <code>-1</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [-1,2,-3,3]
<strong>输出:</strong>3
<strong>解释:</strong>3 是数组中唯一一个满足题目要求的 k 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [-1,10,6,7,-7,1]
<strong>输出:</strong>7
<strong>解释:</strong>数组中存在 1 和 7 对应的负数7 的值更大。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums = [-10,8,6,7,-2,-3]
<strong>输出:</strong>-1
<strong>解释:</strong>不存在满足题目要求的 k ,返回 -1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 1000</code></li>
<li><code>-1000 &lt;= nums[i] &lt;= 1000</code></li>
<li><code>nums[i] != 0</code></li>
</ul>

View File

@@ -0,0 +1,38 @@
<p>给你一个正整数&nbsp;<code>n</code>&nbsp;,你需要找到一个下标从&nbsp;<strong>0</strong>&nbsp;开始的数组&nbsp;<code>powers</code>&nbsp;,它包含 <strong>最少</strong>&nbsp;数目的 <code>2</code>&nbsp;的幂,且它们的和为&nbsp;<code>n</code>&nbsp;<code>powers</code>&nbsp;数组是&nbsp;<strong>非递减</strong>&nbsp;顺序的。根据前面描述,构造&nbsp;<code>powers</code>&nbsp;数组的方法是唯一的。</p>
<p>同时给你一个下标从 <strong>0</strong>&nbsp;开始的二维整数数组&nbsp;<code>queries</code>&nbsp;,其中&nbsp;<code>queries[i] = [left<sub>i</sub>, right<sub>i</sub>]</code>&nbsp;,其中&nbsp;<code>queries[i]</code>&nbsp;表示请你求出满足&nbsp;<code>left<sub>i</sub> &lt;= j &lt;= right<sub>i</sub></code>&nbsp;的所有&nbsp;<code>powers[j]</code>&nbsp;的乘积。</p>
<p>请你返回一个数组<em>&nbsp;</em><code>answers</code>&nbsp;,长度与<em>&nbsp;</em><code>queries</code>&nbsp;的长度相同,其中<em>&nbsp;</em><code>answers[i]</code>是第<em>&nbsp;</em><code>i</code>&nbsp;个查询的答案。由于查询的结果可能非常大,请你将每个&nbsp;<code>answers[i]</code>&nbsp;都对&nbsp;<code>10<sup>9</sup> + 7</code>&nbsp;<strong>取余</strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>n = 15, queries = [[0,1],[2,2],[0,3]]
<b>输出:</b>[2,4,64]
<strong>解释:</strong>
对于 n = 15 ,得到 powers = [1,2,4,8] 。没法得到元素数目更少的数组。
第 1 个查询的答案powers[0] * powers[1] = 1 * 2 = 2 。
第 2 个查询的答案powers[2] = 4 。
第 3 个查询的答案powers[0] * powers[1] * powers[2] * powers[3] = 1 * 2 * 4 * 8 = 64 。
每个答案对 10<sup>9</sup> + 7 得到的结果都相同,所以返回 [2,4,64] 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>n = 2, queries = [[0,0]]
<b>输出:</b>[2]
<strong>解释:</strong>
对于 n = 2, powers = [2] 。
唯一一个查询的答案是 powers[0] = 2 。答案对 10<sup>9</sup> + 7 取余后结果相同,所以返回 [2] 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= queries.length &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= start<sub>i</sub> &lt;= end<sub>i</sub> &lt; powers.length</code></li>
</ul>

View File

@@ -0,0 +1,39 @@
<p>有一棵&nbsp;<code>n</code>&nbsp;个节点的无向树,节点编号为&nbsp;<code>0</code>&nbsp;&nbsp;<code>n - 1</code>&nbsp;</p>
<p>给你一个长度为 <code>n</code>&nbsp;下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>nums</code>&nbsp;,其中&nbsp;<code>nums[i]</code>&nbsp;表示第&nbsp;<code>i</code>&nbsp;个节点的值。同时给你一个长度为 <code>n - 1</code>&nbsp;的二维整数数组&nbsp;<code>edges</code>&nbsp;,其中&nbsp;<code>edges[i] = [a<sub>i</sub>, b<sub>i</sub>]</code>&nbsp;表示节点&nbsp;<code>a<sub>i</sub></code>&nbsp;&nbsp;<code>b<sub>i</sub></code>&nbsp;之间有一条边。</p>
<p>你可以 <strong>删除</strong>&nbsp;一些边,将这棵树分成几个连通块。一个连通块的 <strong>价值</strong>&nbsp;定义为这个连通块中 <strong>所有</strong> 节点 <code>i</code>&nbsp;对应的 <code>nums[i]</code>&nbsp;之和。</p>
<p>你需要删除一些边,删除后得到的各个连通块的价值都相等。请返回你可以删除的边数&nbsp;<strong>最多</strong>&nbsp;为多少。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/08/26/diagramdrawio.png" style="width: 441px; height: 351px;"></p>
<pre><b>输入:</b>nums = [6,2,2,2,6], edges = [[0,1],[1,2],[1,3],[3,4]]
<b>输出:</b>2
<b>解释:</b>上图展示了我们可以删除边 [0,1] 和 [3,4] 。得到的连通块为 [0] [1,2,3] 和 [4] 。每个连通块的价值都为 6 。可以证明没有别的更好的删除方案存在了,所以答案为 2 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>nums = [2], edges = []
<b>输出:</b>0
<b>解释:</b>没有任何边可以删除。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 2 * 10<sup>4</sup></code></li>
<li><code>nums.length == n</code></li>
<li><code>1 &lt;= nums[i] &lt;= 50</code></li>
<li><code>edges.length == n - 1</code></li>
<li><code>edges[i].length == 2</code></li>
<li><code>0 &lt;= edges[i][0], edges[i][1] &lt;= n - 1</code></li>
<li><code>edges</code>&nbsp;表示一棵合法的树。</li>
</ul>

View File

@@ -0,0 +1,34 @@
<p>给你一个由 <strong></strong> 整数组成的数组 <code>nums</code></p>
<p>你必须取出数组中的每个整数,<strong>反转其中每个数位</strong>,并将反转后得到的数字添加到数组的末尾。这一操作只针对 <code>nums</code> 中原有的整数执行。</p>
<p>返回结果数组中 <strong>不同</strong> 整数的数目。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [1,13,10,12,31]
<strong>输出:</strong>6
<strong>解释:</strong>反转每个数字后,结果数组是 [1,13,10,12,31,<em><strong>1,31,1,21,13</strong></em>] 。
反转后得到的数字添加到数组的末尾并按斜体加粗表示。注意对于整数 10 ,反转之后会变成 01 ,即 1 。
数组中不同整数的数目为 6数字 1、10、12、13、21 和 31</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [2,2,2]
<strong>输出:</strong>1
<strong>解释:</strong>反转每个数字后,结果数组是 [2,2,2,<em><strong>2,2,2</strong></em>] 。
数组中不同整数的数目为 1数字 2
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>6</sup></code></li>
</ul>

View File

@@ -0,0 +1,37 @@
<p>给你一个 <strong>非负</strong> 整数 <code>num</code> 。如果存在某个 <strong>非负</strong> 整数 <code>k</code> 满足 <code>k + reverse(k) = num</code>&nbsp; ,则返回 <code>true</code> ;否则,返回<em> </em><code>false</code></p>
<p><code>reverse(k)</code> 表示 <code>k</code> 反转每个数位后得到的数字。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>num = 443
<strong>输出:</strong>true
<strong>解释:</strong>172 + 271 = 443 ,所以返回 true 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>num = 63
<strong>输出:</strong>false
<strong>解释:</strong>63 不能表示为非负整数及其反转后数字之和,返回 false 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>num = 181
<strong>输出:</strong>true
<strong>解释:</strong>140 + 041 = 181 ,所以返回 true 。注意,反转后的数字可能包含前导零。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>0 &lt;= num &lt;= 10<sup>5</sup></code></li>
</ul>

View File

@@ -0,0 +1,44 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的数组&nbsp;<code>nums</code>&nbsp;,它含有&nbsp;<code>n</code>&nbsp;个非负整数。</p>
<p>每一步操作中,你需要:</p>
<ul>
<li>选择一个满足&nbsp;<code>1 &lt;= i &lt; n</code>&nbsp;的整数 <code>i</code>&nbsp;,且&nbsp;<code>nums[i] &gt; 0</code>&nbsp;</li>
<li>&nbsp;<code>nums[i]</code>&nbsp;减 1 。</li>
<li>&nbsp;<code>nums[i - 1]</code>&nbsp;加 1 。</li>
</ul>
<p>你可以对数组执行 <strong>任意</strong>&nbsp;次上述操作,请你返回可以得到的 <code>nums</code>&nbsp;数组中<b>&nbsp;最大值</b>&nbsp;<strong>最小</strong> 为多少。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>nums = [3,7,1,6]
<b>输出:</b>5
<strong>解释:</strong>
一串最优操作是:
1. 选择 i = 1 nums 变为 [4,6,1,6] 。
2. 选择 i = 3 nums 变为 [4,6,2,5] 。
3. 选择 i = 1 nums 变为 [5,5,2,5] 。
nums 中最大值为 5 。无法得到比 5 更小的最大值。
所以我们返回 5 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>nums = [10,1]
<b>输出:</b>10
<strong>解释:</strong>
最优解是不改动 nums 10 是最大值,所以返回 10 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == nums.length</code></li>
<li><code>2 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,39 @@
<p>给你一个长度为&nbsp;<code>5</code>&nbsp;的字符串&nbsp;<code>time</code>&nbsp;,表示一个电子时钟当前的时间,格式为&nbsp;<code>"hh:mm"</code>&nbsp;<strong>最早</strong>&nbsp;可能的时间是&nbsp;<code>"00:00"</code>&nbsp;<strong>最晚</strong>&nbsp;可能的时间是&nbsp;<code>"23:59"</code>&nbsp;</p>
<p>在字符串&nbsp;<code>time</code>&nbsp;中,被字符&nbsp;<code>?</code>&nbsp;替换掉的数位是 <strong>未知的</strong>&nbsp;,被替换的数字可能是&nbsp;<code>0</code>&nbsp;&nbsp;<code>9</code>&nbsp;中的任何一个。</p>
<p>请你返回一个整数<em>&nbsp;</em><code>answer</code>&nbsp;,将每一个 <code>?</code>&nbsp;都用<em>&nbsp;</em><code>0</code>&nbsp;<em>&nbsp;</em><code>9</code>&nbsp;中一个数字替换后,可以得到的有效时间的数目。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>time = "?5:00"
<b>输出:</b>2
<b>解释:</b>我们可以将 ? 替换成 0 或 1 ,得到 "05:00" 或者 "15:00" 。注意我们不能替换成 2 ,因为时间 "25:00" 是无效时间。所以我们有两个选择。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>time = "0?:0?"
<b>输出:</b>100
<b>解释:</b>两个 ? 都可以被 0 到 9 之间的任意数字替换,所以我们总共有 100 种选择。
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>time = "??:??"
<b>输出:</b>1440
<b>解释:</b>小时总共有 24 种选择,分钟总共有 60 种选择。所以总共有 24 * 60 = 1440 种选择。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>time</code>&nbsp;是一个长度为 <code>5</code>&nbsp;的有效字符串,格式为&nbsp;<code>"hh:mm"</code>&nbsp;</li>
<li><code>"00" &lt;= hh &lt;= "23"</code></li>
<li><code>"00" &lt;= mm &lt;= "59"</code></li>
<li>字符串中有的数位是&nbsp;<code>'?'</code>&nbsp;,需要用&nbsp;<code>0</code>&nbsp;&nbsp;<code>9</code>&nbsp;之间的数字替换。</li>
</ul>

View File

@@ -0,0 +1,36 @@
<p>给你一个整数数组 <code>nums</code> 和两个整数 <code>minK</code> 以及 <code>maxK</code></p>
<p><code>nums</code> 的定界子数组是满足下述条件的一个子数组:</p>
<ul>
<li>子数组中的 <strong>最小值</strong> 等于 <code>minK</code></li>
<li>子数组中的 <strong>最大值</strong> 等于 <code>maxK</code></li>
</ul>
<p>返回定界子数组的数目。</p>
<p>子数组是数组中的一个连续部分。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>nums = [1,3,5,2,7,5], minK = 1, maxK = 5
<strong>输出:</strong>2
<strong>解释:</strong>定界子数组是 [1,3,5] 和 [1,3,5,2] 。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>nums = [1,1,1,1], minK = 1, maxK = 1
<strong>输出:</strong>10
<strong>解释:</strong>nums 的每个子数组都是一个定界子数组。共有 10 个子数组。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums[i], minK, maxK &lt;= 10<sup>6</sup></code></li>
</ul>