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-09-19 22:42:50 +08:00
parent 95eae7766c
commit 0b51c1f168
43 changed files with 15126 additions and 11230 deletions

View File

@@ -0,0 +1,52 @@
<p>给你一棵 <strong>完美</strong> 二叉树的根节点 <code>root</code> ,请你反转这棵树中每个 <strong>奇数</strong> 层的节点值。</p>
<ul>
<li>例如,假设第 3 层的节点值是 <code>[2,1,3,4,7,11,29,18]</code> ,那么反转后它应该变成 <code>[18,29,11,7,4,3,1,2]</code></li>
</ul>
<p>反转后,返回树的根节点。</p>
<p><strong>完美</strong> 二叉树需满足:二叉树的所有父节点都有两个子节点,且所有叶子节点都在同一层。</p>
<p>节点的 <strong>层数</strong> 等于该节点到根节点之间的边数。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2022/07/28/first_case1.png" style="width: 626px; height: 191px;" />
<pre>
<strong>输入:</strong>root = [2,3,5,8,13,21,34]
<strong>输出:</strong>[2,5,3,8,13,21,34]
<strong>解释:</strong>
这棵树只有一个奇数层。
在第 1 层的节点分别是 3、5 ,反转后为 5、3 。
</pre>
<p><strong>示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2022/07/28/second_case3.png" style="width: 591px; height: 111px;" />
<pre>
<strong>输入:</strong>root = [7,13,11]
<strong>输出:</strong>[7,11,13]
<strong>解释:</strong>
在第 1 层的节点分别是 13、11 ,反转后为 11、13 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>root = [0,1,2,0,0,0,0,1,1,1,1,2,2,2,2]
<strong>输出:</strong>[0,2,1,0,0,0,0,2,2,2,2,1,1,1,1]
<strong>解释:</strong>奇数层由非零值组成。
在第 1 层的节点分别是 1、2 ,反转后为 2、1 。
在第 3 层的节点分别是 1、1、1、1、2、2、2、2 ,反转后为 2、2、2、2、1、1、1、1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li>树中的节点数目在范围 <code>[1, 2<sup>14</sup>]</code></li>
<li><code>0 &lt;= Node.val &lt;= 10<sup>5</sup></code></li>
<li><code>root</code> 是一棵 <strong>完美</strong> 二叉树</li>
</ul>

View File

@@ -0,0 +1,51 @@
<p>给你一个长度为 <code>n</code> 的数组 <code>words</code> ,该数组由 <strong>非空</strong> 字符串组成。</p>
<p>定义字符串 <code>word</code><strong>分数</strong> 等于以 <code>word</code> 作为 <strong>前缀</strong><code>words[i]</code> 的数目。</p>
<ul>
<li>例如,如果 <code>words = ["a", "ab", "abc", "cab"]</code> ,那么 <code>"ab"</code> 的分数是 <code>2</code> ,因为 <code>"ab"</code><code>"ab"</code><code>"abc"</code> 的一个前缀。</li>
</ul>
<p>返回一个长度为<em> </em><code>n</code> 的数组<em> </em><code>answer</code><em> </em>,其中<em> </em><code>answer[i]</code><em> </em><em>&nbsp;</em><code>words[i]</code> 的每个非空前缀的分数 <strong>总和</strong> <em></em></p>
<p><strong>注意:</strong>字符串视作它自身的一个前缀。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>words = ["abc","ab","bc","b"]
<strong>输出:</strong>[5,4,3,2]
<strong>解释:</strong>对应每个字符串的答案如下:
- "abc" 有 3 个前缀:"a"、"ab" 和 "abc" 。
- 2 个字符串的前缀为 "a" 2 个字符串的前缀为 "ab" 1 个字符串的前缀为 "abc" 。
总计 answer[0] = 2 + 2 + 1 = 5 。
- "ab" 有 2 个前缀:"a" 和 "ab" 。
- 2 个字符串的前缀为 "a" 2 个字符串的前缀为 "ab" 。
总计 answer[1] = 2 + 2 = 4 。
- "bc" 有 2 个前缀:"b" 和 "bc" 。
- 2 个字符串的前缀为 "b" 1 个字符串的前缀为 "bc" 。
总计 answer[2] = 2 + 1 = 3 。
- "b" 有 1 个前缀:"b"。
- 2 个字符串的前缀为 "b" 。
总计 answer[3] = 2 。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>words = ["abcd"]
<strong>输出:</strong>[4]
<strong>解释:</strong>
"abcd" 有 4 个前缀 "a"、"ab"、"abc" 和 "abcd"。
每个前缀的分数都是 1 ,总计 answer[0] = 1 + 1 + 1 + 1 = 4 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= words.length &lt;= 1000</code></li>
<li><code>1 &lt;= words[i].length &lt;= 1000</code></li>
<li><code>words[i]</code> 由小写英文字母组成</li>
</ul>

View File

@@ -0,0 +1,38 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的二维整数数组&nbsp;<code><font face="monospace">transactions</font></code>,其中<code>transactions[i] = [cost<sub>i</sub>, cashback<sub>i</sub>]</code>&nbsp;</p>
<p>数组描述了若干笔交易。其中每笔交易必须以 <strong>某种顺序</strong> 恰好完成一次。在任意一个时刻,你有一定数目的钱&nbsp;<code>money</code>&nbsp;,为了完成交易&nbsp;<code>i</code>&nbsp;<code>money &gt;= cost<sub>i</sub></code>&nbsp;这个条件必须为真。执行交易后,你的钱数&nbsp;<code>money</code> 变成&nbsp;<code>money - cost<sub>i</sub> + cashback<sub>i</sub></code><sub>&nbsp;</sub></p>
<p>请你返回 <strong>任意一种</strong> 交易顺序下,你都能完成所有交易的最少钱数<em>&nbsp;</em><code>money</code>&nbsp;是多少。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>transactions = [[2,1],[5,0],[4,2]]
<b>输出:</b>10
<strong>解释:
</strong>刚开始 money = 10 ,交易可以以任意顺序进行。
可以证明如果 money &lt; 10 ,那么某些交易无法进行。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>transactions = [[3,0],[0,3]]
<b>输出:</b>3
<strong>解释:</strong>
- 如果交易执行的顺序是 [[3,0],[0,3]] ,完成所有交易需要的最少钱数是 3 。
- 如果交易执行的顺序是 [[0,3],[3,0]] ,完成所有交易需要的最少钱数是 0 。
所以,刚开始钱数为 3 ,任意顺序下交易都可以全部完成。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= transactions.length &lt;= 10<sup>5</sup></code></li>
<li><code>transactions[i].length == 2</code></li>
<li><code>0 &lt;= cost<sub>i</sub>, cashback<sub>i</sub> &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,47 @@
<p>给你一个长度为 <code>n</code>&nbsp;下标从 <strong>0</strong>&nbsp;开始的数组&nbsp;<code>nums</code>&nbsp;,数组中所有数字均为非负整数。对于&nbsp;<code>0</code>&nbsp;&nbsp;<code>n - 1</code>&nbsp;之间的每一个下标 <code>i</code>&nbsp;,你需要找出&nbsp;<code>nums</code>&nbsp;中一个 <strong>最小</strong> 非空子数组,它的起始位置为&nbsp;<code>i</code>&nbsp;(包含这个位置),同时有&nbsp;<strong>最大</strong>&nbsp;<strong>按位或</strong><b>运算值</b>&nbsp;</p>
<ul>
<li>换言之,令&nbsp;<code>B<sub>ij</sub></code>&nbsp;表示子数组&nbsp;<code>nums[i...j]</code>&nbsp;的按位或运算的结果,你需要找到一个起始位置为&nbsp;<code>i</code>&nbsp;的最小子数组,这个子数组的按位或运算的结果等于&nbsp;<code>max(B<sub>ik</sub>)</code>&nbsp;,其中&nbsp;<code>i &lt;= k &lt;= n - 1</code>&nbsp;</li>
</ul>
<p>一个数组的按位或运算值是这个数组里所有数字按位或运算的结果。</p>
<p>请你返回一个大小为 <code>n</code>&nbsp;的整数数组<em>&nbsp;</em><code>answer</code>,其中<em>&nbsp;</em><code>answer[i]</code>是开始位置为&nbsp;<code>i</code>&nbsp;,按位或运算结果最大,且&nbsp;<strong>最短</strong>&nbsp;子数组的长度。</p>
<p><strong>子数组</strong>&nbsp;是数组里一段连续非空元素组成的序列。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>nums = [1,0,2,1,3]
<b>输出:</b>[3,3,2,2,1]
<strong>解释:</strong>
任何位置开始,最大按位或运算的结果都是 3 。
- 下标 0 处,能得到结果 3 的最短子数组是 [1,0,2] 。
- 下标 1 处,能得到结果 3 的最短子数组是 [0,2,1] 。
- 下标 2 处,能得到结果 3 的最短子数组是 [2,1] 。
- 下标 3 处,能得到结果 3 的最短子数组是 [1,3] 。
- 下标 4 处,能得到结果 3 的最短子数组是 [3] 。
所以我们返回 [3,3,2,2,1] 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>nums = [1,2]
<b>输出:</b>[2,1]
<strong>解释:
</strong>下标 0 处,能得到最大按位或运算值的最短子数组长度为 2 。
下标 1 处,能得到最大按位或运算值的最短子数组长度为 1 。
所以我们返回 [2,1] 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == nums.length</code></li>
<li><code>1 &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,24 @@
给你一个正整数 <code>n</code> ,返回 <code>2</code><em> </em><em> </em><code>n</code> 的最小公倍数(正整数)。
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>n = 5
<strong>输出:</strong>10
<strong>解释:</strong>5 和 2 的最小公倍数是 10 。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>n = 6
<strong>输出:</strong>6
<strong>解释:</strong>6 和 2 的最小公倍数是 6 。注意数字会是它自身的倍数。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 150</code></li>
</ul>

View File

@@ -0,0 +1,33 @@
<p><strong>字母序连续字符串</strong> 是由字母表中连续字母组成的字符串。换句话说,字符串 <code>"abcdefghijklmnopqrstuvwxyz"</code> 的任意子字符串都是 <strong>字母序连续字符串</strong></p>
<ul>
<li>例如,<code>"abc"</code> 是一个字母序连续字符串,而 <code>"acb"</code><code>"za"</code> 不是。</li>
</ul>
<p>给你一个仅由小写英文字母组成的字符串 <code>s</code> ,返回其 <strong>最长</strong> 的 字母序连续子字符串 的长度。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>s = "abacaba"
<strong>输出:</strong>2
<strong>解释:</strong>共有 4 个不同的字母序连续子字符串 "a"、"b"、"c" 和 "ab" 。
"ab" 是最长的字母序连续子字符串。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>s = "abcde"
<strong>输出:</strong>5
<strong>解释:</strong>"abcde" 是最长的字母序连续子字符串。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 10<sup>5</sup></code></li>
<li><code>s</code> 由小写英文字母组成</li>
</ul>

View File

@@ -0,0 +1,35 @@
<p>Alice 和 Bob 计划分别去罗马开会。</p>
<p>给你四个字符串&nbsp;<code>arriveAlice</code>&nbsp;<code>leaveAlice</code>&nbsp;<code>arriveBob</code>&nbsp;&nbsp;<code>leaveBob</code>&nbsp;。Alice 会在日期&nbsp;<code>arriveAlice</code>&nbsp;&nbsp;<code>leaveAlice</code>&nbsp;之间在城市里(<strong>日期为闭区间</strong>),而 Bob 在日期&nbsp;<code>arriveBob</code>&nbsp;&nbsp;<code>leaveBob</code>&nbsp;之间在城市里(<strong>日期为闭区间</strong>)。每个字符串都包含 5 个字符,格式为&nbsp;<code>"MM-DD"</code>&nbsp;,对应着一个日期的月和日。</p>
<p>请你返回 Alice和 Bob 同时在罗马的天数。</p>
<p>你可以假设所有日期都在 <strong>同一个</strong>&nbsp;自然年,而且 <strong>不是</strong>&nbsp;闰年。每个月份的天数分别为:<code>[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>arriveAlice = "08-15", leaveAlice = "08-18", arriveBob = "08-16", leaveBob = "08-19"
<b>输出:</b>3
<b>解释:</b>Alice 从 8 月 15 号到 8 月 18 号在罗马。Bob 从 8 月 16 号到 8 月 19 号在罗马,他们同时在罗马的日期为 8 月 16、17 和 18 号。所以答案为 3 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>arriveAlice = "10-01", leaveAlice = "10-31", arriveBob = "11-01", leaveBob = "12-31"
<b>输出:</b>0
<b>解释:</b>Alice 和 Bob 没有同时在罗马的日子,所以我们返回 0 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li>所有日期的格式均为&nbsp;<code>"MM-DD"</code>&nbsp;</li>
<li>Alice 和 Bob 的到达日期都 <strong>早于或等于</strong> 他们的离开日期。</li>
<li>题目测试用例所给出的日期均为 <strong>非闰年</strong> 的有效日期。</li>
</ul>

View File

@@ -0,0 +1,36 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>players</code>&nbsp;,其中&nbsp;<code>players[i]</code>&nbsp;表示第 <code>i</code>&nbsp;名运动员的 <strong>能力</strong>&nbsp;值,同时给你一个下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>trainers</code>&nbsp;,其中&nbsp;<code>trainers[j]</code>&nbsp;表示第 <code>j</code>&nbsp;名训练师的 <strong>训练能力值</strong>&nbsp;</p>
<p>如果第 <code>i</code>&nbsp;名运动员的能力值 <strong>小于等于</strong>&nbsp;<code>j</code>&nbsp;名训练师的能力值,那么第&nbsp;<code>i</code>&nbsp;名运动员可以 <strong>匹配</strong>&nbsp;&nbsp;<code>j</code>&nbsp;名训练师。除此以外,每名运动员至多可以匹配一位训练师,每位训练师最多可以匹配一位运动员。</p>
<p>请你返回满足上述要求&nbsp;<code>players</code>&nbsp;<code>trainers</code>&nbsp;<strong>最大</strong> 匹配数。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>players = [4,7,9], trainers = [8,2,5,8]
<b>输出:</b>2
<b>解释:</b>
得到两个匹配的一种方案是:
- players[0] 与 trainers[0] 匹配,因为 4 &lt;= 8 。
- players[1] 与 trainers[3] 匹配,因为 7 &lt;= 8 。
可以证明 2 是可以形成的最大匹配数。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>players = [1,1,1], trainers = [10]
<b>输出:</b>1
<b>解释:</b>
训练师可以匹配所有 3 个运动员
每个运动员至多只能匹配一个训练师,所以最大答案是 1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= players.length, trainers.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= players[i], trainers[j] &lt;= 10<sup>9</sup></code></li>
</ul>