mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-09-05 07:21:40 +08:00
update
This commit is contained in:
@@ -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> </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> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>树中的节点数目在范围 <code>[1, 2<sup>14</sup>]</code> 内</li>
|
||||
<li><code>0 <= Node.val <= 10<sup>5</sup></code></li>
|
||||
<li><code>root</code> 是一棵 <strong>完美</strong> 二叉树</li>
|
||||
</ul>
|
@@ -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> </em><code>words[i]</code> 的每个非空前缀的分数 <strong>总和</strong> <em>。</em></p>
|
||||
|
||||
<p><strong>注意:</strong>字符串视作它自身的一个前缀。</p>
|
||||
|
||||
<p> </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> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= words.length <= 1000</code></li>
|
||||
<li><code>1 <= words[i].length <= 1000</code></li>
|
||||
<li><code>words[i]</code> 由小写英文字母组成</li>
|
||||
</ul>
|
@@ -0,0 +1,38 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的二维整数数组 <code><font face="monospace">transactions</font></code>,其中<code>transactions[i] = [cost<sub>i</sub>, cashback<sub>i</sub>]</code> 。</p>
|
||||
|
||||
<p>数组描述了若干笔交易。其中每笔交易必须以 <strong>某种顺序</strong> 恰好完成一次。在任意一个时刻,你有一定数目的钱 <code>money</code> ,为了完成交易 <code>i</code> ,<code>money >= cost<sub>i</sub></code> 这个条件必须为真。执行交易后,你的钱数 <code>money</code> 变成 <code>money - cost<sub>i</sub> + cashback<sub>i</sub></code><sub> </sub>。</p>
|
||||
|
||||
<p>请你返回 <strong>任意一种</strong> 交易顺序下,你都能完成所有交易的最少钱数<em> </em><code>money</code> 是多少。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>transactions = [[2,1],[5,0],[4,2]]
|
||||
<b>输出:</b>10
|
||||
<strong>解释:
|
||||
</strong>刚开始 money = 10 ,交易可以以任意顺序进行。
|
||||
可以证明如果 money < 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> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= transactions.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>transactions[i].length == 2</code></li>
|
||||
<li><code>0 <= cost<sub>i</sub>, cashback<sub>i</sub> <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,47 @@
|
||||
<p>给你一个长度为 <code>n</code> 下标从 <strong>0</strong> 开始的数组 <code>nums</code> ,数组中所有数字均为非负整数。对于 <code>0</code> 到 <code>n - 1</code> 之间的每一个下标 <code>i</code> ,你需要找出 <code>nums</code> 中一个 <strong>最小</strong> 非空子数组,它的起始位置为 <code>i</code> (包含这个位置),同时有 <strong>最大</strong> 的 <strong>按位或</strong><b>运算值</b> 。</p>
|
||||
|
||||
<ul>
|
||||
<li>换言之,令 <code>B<sub>ij</sub></code> 表示子数组 <code>nums[i...j]</code> 的按位或运算的结果,你需要找到一个起始位置为 <code>i</code> 的最小子数组,这个子数组的按位或运算的结果等于 <code>max(B<sub>ik</sub>)</code> ,其中 <code>i <= k <= n - 1</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p>一个数组的按位或运算值是这个数组里所有数字按位或运算的结果。</p>
|
||||
|
||||
<p>请你返回一个大小为 <code>n</code> 的整数数组<em> </em><code>answer</code>,其中<em> </em><code>answer[i]</code>是开始位置为 <code>i</code> ,按位或运算结果最大,且 <strong>最短</strong> 子数组的长度。</p>
|
||||
|
||||
<p><strong>子数组</strong> 是数组里一段连续非空元素组成的序列。</p>
|
||||
|
||||
<p> </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> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>n == nums.length</code></li>
|
||||
<li><code>1 <= n <= 10<sup>5</sup></code></li>
|
||||
<li><code>0 <= nums[i] <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,24 @@
|
||||
给你一个正整数 <code>n</code> ,返回 <code>2</code><em> </em>和<em> </em><code>n</code> 的最小公倍数(正整数)。
|
||||
<p> </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> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= n <= 150</code></li>
|
||||
</ul>
|
@@ -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> </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> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= s.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>s</code> 由小写英文字母组成</li>
|
||||
</ul>
|
@@ -0,0 +1,35 @@
|
||||
<p>Alice 和 Bob 计划分别去罗马开会。</p>
|
||||
|
||||
<p>给你四个字符串 <code>arriveAlice</code> ,<code>leaveAlice</code> ,<code>arriveBob</code> 和 <code>leaveBob</code> 。Alice 会在日期 <code>arriveAlice</code> 到 <code>leaveAlice</code> 之间在城市里(<strong>日期为闭区间</strong>),而 Bob 在日期 <code>arriveBob</code> 到 <code>leaveBob</code> 之间在城市里(<strong>日期为闭区间</strong>)。每个字符串都包含 5 个字符,格式为 <code>"MM-DD"</code> ,对应着一个日期的月和日。</p>
|
||||
|
||||
<p>请你返回 Alice和 Bob 同时在罗马的天数。</p>
|
||||
|
||||
<p>你可以假设所有日期都在 <strong>同一个</strong> 自然年,而且 <strong>不是</strong> 闰年。每个月份的天数分别为:<code>[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]</code> 。</p>
|
||||
|
||||
<p> </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> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>所有日期的格式均为 <code>"MM-DD"</code> 。</li>
|
||||
<li>Alice 和 Bob 的到达日期都 <strong>早于或等于</strong> 他们的离开日期。</li>
|
||||
<li>题目测试用例所给出的日期均为 <strong>非闰年</strong> 的有效日期。</li>
|
||||
</ul>
|
@@ -0,0 +1,36 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>players</code> ,其中 <code>players[i]</code> 表示第 <code>i</code> 名运动员的 <strong>能力</strong> 值,同时给你一个下标从 <strong>0</strong> 开始的整数数组 <code>trainers</code> ,其中 <code>trainers[j]</code> 表示第 <code>j</code> 名训练师的 <strong>训练能力值</strong> 。</p>
|
||||
|
||||
<p>如果第 <code>i</code> 名运动员的能力值 <strong>小于等于</strong> 第 <code>j</code> 名训练师的能力值,那么第 <code>i</code> 名运动员可以 <strong>匹配</strong> 第 <code>j</code> 名训练师。除此以外,每名运动员至多可以匹配一位训练师,每位训练师最多可以匹配一位运动员。</p>
|
||||
|
||||
<p>请你返回满足上述要求 <code>players</code> 和 <code>trainers</code> 的 <strong>最大</strong> 匹配数。</p>
|
||||
|
||||
<p> </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 <= 8 。
|
||||
- players[1] 与 trainers[3] 匹配,因为 7 <= 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> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= players.length, trainers.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= players[i], trainers[j] <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
Reference in New Issue
Block a user