mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-09-04 23:11:41 +08:00
update
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的字符串 <code>street</code> 。<code>street</code> 中每个字符要么是表示房屋的 <code>'H'</code> ,要么是表示空位的 <code>'.'</code> 。</p>
|
||||
|
||||
<p>你可以在 <strong>空位</strong> 放置水桶,从相邻的房屋收集雨水。位置在 <code>i - 1</code> <strong>或者</strong> <code>i + 1</code> 的水桶可以收集位置为 <code>i</code> 处房屋的雨水。一个水桶如果相邻两个位置都有房屋,那么它可以收集 <strong>两个</strong> 房屋的雨水。</p>
|
||||
|
||||
<p>在确保 <strong>每个</strong> 房屋旁边都 <strong>至少</strong> 有一个水桶的前提下,请你返回需要的 <strong>最少</strong> 水桶数。如果无解请返回 <code>-1</code> 。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>street = "H..H"
|
||||
<b>输出:</b>2
|
||||
<strong>解释:</strong>
|
||||
我们可以在下标为 1 和 2 处放水桶。
|
||||
"H..H" -> "HBBH"('B' 表示放置水桶)。
|
||||
下标为 0 处的房屋右边有水桶,下标为 3 处的房屋左边有水桶。
|
||||
所以每个房屋旁边都至少有一个水桶收集雨水。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>street = ".H.H."
|
||||
<b>输出:</b>1
|
||||
<strong>解释:</strong>
|
||||
我们可以在下标为 2 处放置一个水桶。
|
||||
".H.H." -> ".HBH."('B' 表示放置水桶)。
|
||||
下标为 1 处的房屋右边有水桶,下标为 3 处的房屋左边有水桶。
|
||||
所以每个房屋旁边都至少有一个水桶收集雨水。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 3:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>street = ".HHH."
|
||||
<b>输出:</b>-1
|
||||
<strong>解释:</strong>
|
||||
没有空位可以放置水桶收集下标为 2 处的雨水。
|
||||
所以没有办法收集所有房屋的雨水。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 4:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>street = "H"
|
||||
<b>输出:</b>-1
|
||||
<strong>解释:</strong>
|
||||
没有空位放置水桶。
|
||||
所以没有办法收集所有房屋的雨水。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 5:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>street = "."
|
||||
<b>输出:</b>0
|
||||
<strong>解释:</strong>
|
||||
没有房屋需要收集雨水。
|
||||
所以需要 0 个水桶。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= street.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>street[i]</code> 要么是 <code>'H'</code> ,要么是 <code>'.'</code> 。</li>
|
||||
</ul>
|
@@ -0,0 +1,30 @@
|
||||
<p>给你一个由正整数组成的整数数组 <code>nums</code> ,返回其中可被 <code>3</code> 整除的所有偶数的平均值。</p>
|
||||
|
||||
<p>注意:<code>n</code> 个元素的平均值等于 <code>n</code> 个元素 <strong>求和</strong> 再除以 <code>n</code> ,结果 <strong>向下取整</strong> 到最接近的整数。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>nums = [1,3,6,10,12,15]
|
||||
<strong>输出:</strong>9
|
||||
<strong>解释:</strong>6 和 12 是可以被 3 整除的偶数。(6 + 12) / 2 = 9 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>nums = [1,2,4,7,10]
|
||||
<strong>输出:</strong>0
|
||||
<strong>解释:</strong>不存在满足题目要求的整数,所以返回 0 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums.length <= 1000</code></li>
|
||||
<li><code>1 <= nums[i] <= 1000</code></li>
|
||||
</ul>
|
@@ -0,0 +1,50 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的数组 <code>nums</code> ,数组大小为 <code>n</code> ,且由 <strong>非负</strong> 整数组成。</p>
|
||||
|
||||
<p>你需要对数组执行 <code>n - 1</code> 步操作,其中第 <code>i</code> 步操作(从 <strong>0</strong> 开始计数)要求对 <code>nums</code> 中第 <code>i</code> 个元素执行下述指令:</p>
|
||||
|
||||
<ul>
|
||||
<li>如果 <code>nums[i] == nums[i + 1]</code> ,则 <code>nums[i]</code> 的值变成原来的 <code>2</code> 倍,<code>nums[i + 1]</code> 的值变成 <code>0</code> 。否则,跳过这步操作。</li>
|
||||
</ul>
|
||||
|
||||
<p>在执行完 <strong>全部</strong> 操作后,将所有 <code>0</code> <strong>移动</strong> 到数组的 <strong>末尾</strong> 。</p>
|
||||
|
||||
<ul>
|
||||
<li>例如,数组 <code>[1,0,2,0,0,1]</code> 将所有 <code>0</code> 移动到末尾后变为 <code>[1,2,1,0,0,0]</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回结果数组。</p>
|
||||
|
||||
<p><strong>注意</strong> 操作应当 <strong>依次有序</strong> 执行,而不是一次性全部执行。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>nums = [1,2,2,1,1,0]
|
||||
<strong>输出:</strong>[1,4,2,0,0,0]
|
||||
<strong>解释:</strong>执行以下操作:
|
||||
- i = 0: nums[0] 和 nums[1] 不相等,跳过这步操作。
|
||||
- i = 1: nums[1] 和 nums[2] 相等,nums[1] 的值变成原来的 2 倍,nums[2] 的值变成 0 。数组变成 [1,<em><strong>4</strong></em>,<em><strong>0</strong></em>,1,1,0] 。
|
||||
- i = 2: nums[2] 和 nums[3] 不相等,所以跳过这步操作。
|
||||
- i = 3: nums[3] 和 nums[4] 相等,nums[3] 的值变成原来的 2 倍,nums[4] 的值变成 0 。数组变成 [1,4,0,<em><strong>2</strong></em>,<em><strong>0</strong></em>,0] 。
|
||||
- i = 4: nums[4] 和 nums[5] 相等,nums[4] 的值变成原来的 2 倍,nums[5] 的值变成 0 。数组变成 [1,4,0,2,<em><strong>0</strong></em>,<em><strong>0</strong></em>] 。
|
||||
执行完所有操作后,将 0 全部移动到数组末尾,得到结果数组 [1,4,2,0,0,0] 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>nums = [0,1]
|
||||
<strong>输出:</strong>[1,0]
|
||||
<strong>解释:</strong>无法执行任何操作,只需要将 0 移动到末尾。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>2 <= nums.length <= 2000</code></li>
|
||||
<li><code>0 <= nums[i] <= 1000</code></li>
|
||||
</ul>
|
@@ -0,0 +1,44 @@
|
||||
<p>给你一个字符串数组 <code>words</code> ,每一个字符串长度都相同,令所有字符串的长度都为 <code>n</code> 。</p>
|
||||
|
||||
<p>每个字符串 <code>words[i]</code> 可以被转化为一个长度为 <code>n - 1</code> 的 <strong>差值整数数组</strong> <code>difference[i]</code> ,其中对于 <code>0 <= j <= n - 2</code> 有 <code>difference[i][j] = words[i][j+1] - words[i][j]</code> 。注意两个字母的差值定义为它们在字母表中 <strong>位置</strong> 之差,也就是说 <code>'a'</code> 的位置是 <code>0</code> ,<code>'b'</code> 的位置是 <code>1</code> ,<code>'z'</code> 的位置是 <code>25</code> 。</p>
|
||||
|
||||
<ul>
|
||||
<li>比方说,字符串 <code>"acb"</code> 的差值整数数组是 <code>[2 - 0, 1 - 2] = [2, -1]</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p><code>words</code> 中所有字符串 <strong>除了一个字符串以外</strong> ,其他字符串的差值整数数组都相同。你需要找到那个不同的字符串。</p>
|
||||
|
||||
<p>请你返回<em> </em><code>words</code>中 <strong>差值整数数组</strong> 不同的字符串。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>words = ["adc","wzy","abc"]
|
||||
<b>输出:</b>"abc"
|
||||
<b>解释:</b>
|
||||
- "adc" 的差值整数数组是 [3 - 0, 2 - 3] = [3, -1] 。
|
||||
- "wzy" 的差值整数数组是 [25 - 22, 24 - 25]= [3, -1] 。
|
||||
- "abc" 的差值整数数组是 [1 - 0, 2 - 1] = [1, 1] 。
|
||||
不同的数组是 [1, 1],所以返回对应的字符串,"abc"。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>words = ["aaa","bob","ccc","ddd"]
|
||||
<b>输出:</b>"bob"
|
||||
<b>解释:</b>除了 "bob" 的差值整数数组是 [13, -13] 以外,其他字符串的差值整数数组都是 [0, 0] 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>3 <= words.length <= 100</code></li>
|
||||
<li><code>n == words[i].length</code></li>
|
||||
<li><code>2 <= n <= 20</code></li>
|
||||
<li><code>words[i]</code> 只含有小写英文字母。</li>
|
||||
</ul>
|
@@ -0,0 +1,42 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的数组 <code>nums</code> ,它包含若干正整数,表示数轴上你需要摧毁的目标所在的位置。同时给你一个整数 <code>space</code> 。</p>
|
||||
|
||||
<p>你有一台机器可以摧毁目标。给机器 <strong>输入</strong> <code>nums[i]</code> ,这台机器会摧毁所有位置在 <code>nums[i] + c * space</code> 的目标,其中 <code>c</code> 是任意非负整数。你想摧毁 <code>nums</code> 中 <strong>尽可能多</strong> 的目标。</p>
|
||||
|
||||
<p>请你返回在摧毁数目最多的前提下,<code>nums[i]</code> 的 <strong>最小值</strong> 。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>nums = [3,7,8,1,1,5], space = 2
|
||||
<b>输出:</b>1
|
||||
<b>解释:</b>如果我们输入 nums[3] ,我们可以摧毁位于 1,3,5,7,9,... 这些位置的目标。
|
||||
这种情况下, 我们总共可以摧毁 5 个目标(除了 nums[2])。
|
||||
没有办法摧毁多于 5 个目标,所以我们返回 nums[3] 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>nums = [1,3,5,2,4,6], space = 2
|
||||
<b>输出:</b>1
|
||||
<b>解释:</b>输入 nums[0] 或者 nums[3] 都会摧毁 3 个目标。
|
||||
没有办法摧毁多于 3 个目标。
|
||||
由于 nums[0] 是最小的可以摧毁 3 个目标的整数,所以我们返回 1 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 3:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>nums = [6,2,5], space = 100
|
||||
<b>输出:</b>2
|
||||
<b>解释:</b>无论我们输入哪个数字,都只能摧毁 1 个目标。输入的最小整数是 nums[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 <= space <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,64 @@
|
||||
<p>X 轴上有一些机器人和工厂。给你一个整数数组 <code>robot</code> ,其中 <code>robot[i]</code> 是第 <code>i</code> 个机器人的位置。再给你一个二维整数数组 <code>factory</code> ,其中 <code>factory[j] = [position<sub>j</sub>, limit<sub>j</sub>]</code> ,表示第 <code>j</code> 个工厂的位置在 <code>position<sub>j</sub></code> ,且第 <code>j</code> 个工厂最多可以修理 <code>limit<sub>j</sub></code> 个机器人。</p>
|
||||
|
||||
<p>每个机器人所在的位置 <strong>互不相同</strong> 。每个工厂所在的位置也 <strong>互不相同</strong> 。注意一个机器人可能一开始跟一个工厂在 <strong>相同的位置</strong> 。</p>
|
||||
|
||||
<p>所有机器人一开始都是坏的,他们会沿着设定的方向一直移动。设定的方向要么是 X 轴的正方向,要么是 X 轴的负方向。当一个机器人经过一个没达到上限的工厂时,这个工厂会维修这个机器人,且机器人停止移动。</p>
|
||||
|
||||
<p><b>任何时刻</b>,你都可以设置 <strong>部分</strong> 机器人的移动方向。你的目标是最小化所有机器人总的移动距离。</p>
|
||||
|
||||
<p>请你返回所有机器人移动的最小总距离。测试数据保证所有机器人都可以被维修。</p>
|
||||
|
||||
<p><strong>注意:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>所有机器人移动速度相同。</li>
|
||||
<li>如果两个机器人移动方向相同,它们永远不会碰撞。</li>
|
||||
<li>如果两个机器人迎面相遇,它们也不会碰撞,它们彼此之间会擦肩而过。</li>
|
||||
<li>如果一个机器人经过了一个已经达到上限的工厂,机器人会当作工厂不存在,继续移动。</li>
|
||||
<li>机器人从位置 <code>x</code> 到位置 <code>y</code> 的移动距离为 <code>|y - x|</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://pic.leetcode-cn.com/1667542978-utuiPv-image.png" style="width: 500px; height: 320px;" /></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>robot = [0,4,6], factory = [[2,2],[6,2]]
|
||||
<b>输出:</b>4
|
||||
<b>解释:</b>如上图所示:
|
||||
- 第一个机器人从位置 0 沿着正方向移动,在第一个工厂处维修。
|
||||
- 第二个机器人从位置 4 沿着负方向移动,在第一个工厂处维修。
|
||||
- 第三个机器人在位置 6 被第二个工厂维修,它不需要移动。
|
||||
第一个工厂的维修上限是 2 ,它维修了 2 个机器人。
|
||||
第二个工厂的维修上限是 2 ,它维修了 1 个机器人。
|
||||
总移动距离是 |2 - 0| + |2 - 4| + |6 - 6| = 4 。没有办法得到比 4 更少的总移动距离。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://pic.leetcode-cn.com/1667542984-OAIRFN-image.png" style="width: 500px; height: 329px;" /></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b>robot = [1,-1], factory = [[-2,1],[2,1]]
|
||||
<b>输出:</b>2
|
||||
<b>解释:</b>如上图所示:
|
||||
- 第一个机器人从位置 1 沿着正方向移动,在第二个工厂处维修。
|
||||
- 第二个机器人在位置 -1 沿着负方向移动,在第一个工厂处维修。
|
||||
第一个工厂的维修上限是 1 ,它维修了 1 个机器人。
|
||||
第二个工厂的维修上限是 1 ,它维修了 1 个机器人。
|
||||
总移动距离是 |2 - 1| + |(-2) - (-1)| = 2 。没有办法得到比 2 更少的总移动距离。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= robot.length, factory.length <= 100</code></li>
|
||||
<li><code>factory[j].length == 2</code></li>
|
||||
<li><code>-10<sup>9</sup> <= robot[i], position<sub>j</sub> <= 10<sup>9</sup></code></li>
|
||||
<li><code>0 <= limit<sub>j</sub> <= robot.length</code></li>
|
||||
<li>测试数据保证所有机器人都可以被维修。</li>
|
||||
</ul>
|
@@ -0,0 +1,48 @@
|
||||
<p>给你两个字符串数组 <code>creators</code> 和 <code>ids</code> ,和一个整数数组 <code>views</code> ,所有数组的长度都是 <code>n</code> 。平台上第 <code>i</code> 个视频者是 <code>creator[i]</code> ,视频分配的 id 是 <code>ids[i]</code> ,且播放量为 <code>views[i]</code> 。</p>
|
||||
|
||||
<p>视频创作者的 <strong>流行度</strong> 是该创作者的 <strong>所有</strong> 视频的播放量的 <strong>总和</strong> 。请找出流行度 <strong>最高</strong> 创作者以及该创作者播放量 <strong>最大</strong> 的视频的 id 。</p>
|
||||
|
||||
<ul>
|
||||
<li>如果存在多个创作者流行度都最高,则需要找出所有符合条件的创作者。</li>
|
||||
<li>如果某个创作者存在多个播放量最高的视频,则只需要找出字典序最小的 <code>id</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回一个二维字符串数组<em> </em><code>answer</code><em> </em>,其中<em> </em><code>answer[i] = [creator<sub>i</sub>, id<sub>i</sub>]</code><em> </em>表示<em> </em><code>creator<sub>i</sub></code> 的流行度 <strong>最高</strong> 且其最流行的视频 id 是<em> </em><code>id<sub>i</sub></code><em> </em>,可以按任何顺序返回该结果<em>。</em></p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>creators = ["alice","bob","alice","chris"], ids = ["one","two","three","four"], views = [5,10,5,4]
|
||||
<strong>输出:</strong>[["alice","one"],["bob","two"]]
|
||||
<strong>解释:</strong>
|
||||
alice 的流行度是 5 + 5 = 10 。
|
||||
bob 的流行度是 10 。
|
||||
chris 的流行度是 4 。
|
||||
alice 和 bob 是流行度最高的创作者。
|
||||
bob 播放量最高的视频 id 为 "two" 。
|
||||
alice 播放量最高的视频 id 是 "one" 和 "three" 。由于 "one" 的字典序比 "three" 更小,所以结果中返回的 id 是 "one" 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>creators = ["alice","alice","alice"], ids = ["a","b","c"], views = [1,2,2]
|
||||
<strong>输出:</strong>[["alice","b"]]
|
||||
<strong>解释:</strong>
|
||||
id 为 "b" 和 "c" 的视频都满足播放量最高的条件。
|
||||
由于 "b" 的字典序比 "c" 更小,所以结果中返回的 id 是 "b" 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>n == creators.length == ids.length == views.length</code></li>
|
||||
<li><code>1 <= n <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= creators[i].length, ids[i].length <= 5</code></li>
|
||||
<li><code>creators[i]</code> 和 <code>ids[i]</code> 仅由小写英文字母组成</li>
|
||||
<li><code>0 <= views[i] <= 10<sup>5</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,58 @@
|
||||
<p>给你一棵 <strong>二叉树</strong> 的根节点 <code>root</code> ,树中有 <code>n</code> 个节点。每个节点都可以被分配一个从 <code>1</code> 到 <code>n</code> 且互不相同的值。另给你一个长度为 <code>m</code> 的数组 <code>queries</code> 。</p>
|
||||
|
||||
<p>你必须在树上执行 <code>m</code> 个 <strong>独立</strong> 的查询,其中第 <code>i</code> 个查询你需要执行以下操作:</p>
|
||||
|
||||
<ul>
|
||||
<li>从树中 <strong>移除</strong> 以 <code>queries[i]</code> 的值作为根节点的子树。题目所用测试用例保证 <code>queries[i]</code> <strong>不</strong> 等于根节点的值。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回一个长度为 <code>m</code> 的数组<em> </em><code>answer</code><em> </em>,其中<em> </em><code>answer[i]</code><em> </em>是执行第 <code>i</code> 个查询后树的高度。</p>
|
||||
|
||||
<p><strong>注意:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>查询之间是独立的,所以在每个查询执行后,树会回到其 <strong>初始</strong> 状态。</li>
|
||||
<li>树的高度是从根到树中某个节点的 <strong>最长简单路径中的边数</strong> 。</li>
|
||||
</ul>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/09/07/binaryytreeedrawio-1.png" style="width: 495px; height: 281px;" /></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>root = [1,3,4,2,null,6,5,null,null,null,null,null,7], queries = [4]
|
||||
<strong>输出:</strong>[2]
|
||||
<strong>解释:</strong>上图展示了从树中移除以 4 为根节点的子树。
|
||||
树的高度是 2(路径为 1 -> 3 -> 2)。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/09/07/binaryytreeedrawio-2.png" style="width: 301px; height: 284px;" /></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>root = [5,8,9,2,1,3,7,4,6], queries = [3,2,4,8]
|
||||
<strong>输出:</strong>[3,2,3,2]
|
||||
<strong>解释:</strong>执行下述查询:
|
||||
- 移除以 3 为根节点的子树。树的高度变为 3(路径为 5 -> 8 -> 2 -> 4)。
|
||||
- 移除以 2 为根节点的子树。树的高度变为 2(路径为 5 -> 8 -> 1)。
|
||||
- 移除以 4 为根节点的子树。树的高度变为 3(路径为 5 -> 8 -> 2 -> 6)。
|
||||
- 移除以 8 为根节点的子树。树的高度变为 2(路径为 5 -> 9 -> 3)。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>树中节点的数目是 <code>n</code></li>
|
||||
<li><code>2 <= n <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= Node.val <= n</code></li>
|
||||
<li>树中的所有值 <strong>互不相同</strong></li>
|
||||
<li><code>m == queries.length</code></li>
|
||||
<li><code>1 <= m <= min(n, 10<sup>4</sup>)</code></li>
|
||||
<li><code>1 <= queries[i] <= n</code></li>
|
||||
<li><code>queries[i] != root.val</code></li>
|
||||
</ul>
|
@@ -0,0 +1,37 @@
|
||||
<p>给你两个正整数 <code>n</code> 和 <code>target</code> 。</p>
|
||||
|
||||
<p>如果某个整数每一位上的数字相加小于或等于 <code>target</code> ,则认为这个整数是一个 <strong>美丽整数</strong> 。</p>
|
||||
|
||||
<p>找出并返回满足 <code>n + x</code> 是 <strong>美丽整数</strong> 的最小非负整数 <code>x</code> 。生成的输入保证总可以使 <code>n</code> 变成一个美丽整数。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>n = 16, target = 6
|
||||
<strong>输出:</strong>4
|
||||
<strong>解释:</strong>最初,n 是 16 ,且其每一位数字的和是 1 + 6 = 7 。在加 4 之后,n 变为 20 且每一位数字的和变成 2 + 0 = 2 。可以证明无法加上一个小于 4 的非负整数使 n 变成一个美丽整数。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>n = 467, target = 6
|
||||
<strong>输出:</strong>33
|
||||
<strong>解释:</strong>最初,n 是 467 ,且其每一位数字的和是 4 + 6 + 7 = 17 。在加 33 之后,n 变为 500 且每一位数字的和变成 5 + 0 + 0 = 5 。可以证明无法加上一个小于 33 的非负整数使 n 变成一个美丽整数。</pre>
|
||||
|
||||
<p><strong>示例 3:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>n = 1, target = 1
|
||||
<strong>输出:</strong>0
|
||||
<strong>解释:</strong>最初,n 是 1 ,且其每一位数字的和是 1 ,已经小于等于 target 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= n <= 10<sup>12</sup></code></li>
|
||||
<li><code>1 <= target <= 150</code></li>
|
||||
<li>生成的输入保证总可以使 <code>n</code> 变成一个美丽整数。</li>
|
||||
</ul>
|
@@ -0,0 +1,43 @@
|
||||
<p>给你一个整数数组 <code>nums</code> 和一个整数 <code>k</code> 。请你从 <code>nums</code> 中满足下述条件的全部子数组中找出最大子数组和:</p>
|
||||
|
||||
<ul>
|
||||
<li>子数组的长度是 <code>k</code>,且</li>
|
||||
<li>子数组中的所有元素 <strong>各不相同 。</strong></li>
|
||||
</ul>
|
||||
|
||||
<p>返回满足题面要求的最大子数组和。如果不存在子数组满足这些条件,返回 <code>0</code> 。</p>
|
||||
|
||||
<p><strong>子数组</strong> 是数组中一段连续非空的元素序列。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>nums = [1,5,4,2,9,9,9], k = 3
|
||||
<strong>输出:</strong>15
|
||||
<strong>解释:</strong>nums 中长度为 3 的子数组是:
|
||||
- [1,5,4] 满足全部条件,和为 10 。
|
||||
- [5,4,2] 满足全部条件,和为 11 。
|
||||
- [4,2,9] 满足全部条件,和为 15 。
|
||||
- [2,9,9] 不满足全部条件,因为元素 9 出现重复。
|
||||
- [9,9,9] 不满足全部条件,因为元素 9 出现重复。
|
||||
因为 15 是满足全部条件的所有子数组中的最大子数组和,所以返回 15 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>nums = [4,4,4], k = 3
|
||||
<strong>输出:</strong>0
|
||||
<strong>解释:</strong>nums 中长度为 3 的子数组是:
|
||||
- [4,4,4] 不满足全部条件,因为元素 4 出现重复。
|
||||
因为不存在满足全部条件的子数组,所以返回 0 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= k <= nums.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= nums[i] <= 10<sup>5</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,51 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>costs</code> ,其中 <code>costs[i]</code> 是雇佣第 <code>i</code> 位工人的代价。</p>
|
||||
|
||||
<p>同时给你两个整数 <code>k</code> 和 <code>candidates</code> 。我们想根据以下规则恰好雇佣 <code>k</code> 位工人:</p>
|
||||
|
||||
<ul>
|
||||
<li>总共进行 <code>k</code> 轮雇佣,且每一轮恰好雇佣一位工人。</li>
|
||||
<li>在每一轮雇佣中,从最前面 <code>candidates</code> 和最后面 <code>candidates</code> 人中选出代价最小的一位工人,如果有多位代价相同且最小的工人,选择下标更小的一位工人。
|
||||
<ul>
|
||||
<li>比方说,<code>costs = [3,2,7,7,1,2]</code> 且 <code>candidates = 2</code> ,第一轮雇佣中,我们选择第 <code>4</code> 位工人,因为他的代价最小 <code>[<em>3,2</em>,7,7,<em><strong>1</strong>,2</em>]</code> 。</li>
|
||||
<li>第二轮雇佣,我们选择第 <code>1</code> 位工人,因为他们的代价与第 <code>4</code> 位工人一样都是最小代价,而且下标更小,<code>[<em>3,<strong>2</strong></em>,7,<em>7,2</em>]</code> 。注意每一轮雇佣后,剩余工人的下标可能会发生变化。</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>如果剩余员工数目不足 <code>candidates</code> 人,那么下一轮雇佣他们中代价最小的一人,如果有多位代价相同且最小的工人,选择下标更小的一位工人。</li>
|
||||
<li>一位工人只能被选择一次。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回雇佣恰好<em> </em><code>k</code> 位工人的总代价。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>costs = [17,12,10,2,7,2,11,20,8], k = 3, candidates = 4
|
||||
<b>输出:</b>11
|
||||
<b>解释:</b>我们总共雇佣 3 位工人。总代价一开始为 0 。
|
||||
- 第一轮雇佣,我们从 [<strong><em>17,12,10,2</em></strong>,7,<strong><em>2,11,20,8</em></strong>] 中选择。最小代价是 2 ,有两位工人,我们选择下标更小的一位工人,即第 3 位工人。总代价是 0 + 2 = 2 。
|
||||
- 第二轮雇佣,我们从 [<strong><em>17,12,10,7</em></strong>,<strong><em>2,11,20,8</em></strong>] 中选择。最小代价是 2 ,下标为 4 ,总代价是 2 + 2 = 4 。
|
||||
- 第三轮雇佣,我们从 [<strong><em>17,12,10,7,11,20,8</em></strong>] 中选择,最小代价是 7 ,下标为 3 ,总代价是 4 + 7 = 11 。注意下标为 3 的工人同时在最前面和最后面 4 位工人中。
|
||||
总雇佣代价是 11 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>costs = [1,2,4,1], k = 3, candidates = 3
|
||||
<b>输出:</b>4
|
||||
<b>解释:</b>我们总共雇佣 3 位工人。总代价一开始为 0 。
|
||||
- 第一轮雇佣,我们从 [<strong><em>1,2,4,1</em></strong>] 中选择。最小代价为 1 ,有两位工人,我们选择下标更小的一位工人,即第 0 位工人,总代价是 0 + 1 = 1 。注意,下标为 1 和 2 的工人同时在最前面和最后面 3 位工人中。
|
||||
- 第二轮雇佣,我们从 [<strong><em>2,4,1</em></strong>] 中选择。最小代价为 1 ,下标为 2 ,总代价是 1 + 1 = 2 。
|
||||
- 第三轮雇佣,少于 3 位工人,我们从剩余工人 [<strong><em>2,4</em></strong>] 中选择。最小代价是 2 ,下标为 0 。总代价为 2 + 2 = 4 。
|
||||
总雇佣代价是 4 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= costs.length <= 10<sup>5 </sup></code></li>
|
||||
<li><code>1 <= costs[i] <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= k, candidates <= costs.length</code></li>
|
||||
</ul>
|
Reference in New Issue
Block a user