1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-09-05 23:41:41 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
This commit is contained in:
2024-03-22 16:17:08 +08:00
parent e31313baa5
commit ed5c92e00e
65 changed files with 15521 additions and 9133 deletions

View File

@@ -0,0 +1,47 @@
<p>给你一个长度为 <code>n</code>&nbsp;下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>nums</code>&nbsp;和一个 <strong>正奇数</strong>&nbsp;整数&nbsp;<code>k</code>&nbsp;</p>
<p><code>x</code> 个子数组的能量值定义为&nbsp;<code>strength = sum[1] * x - sum[2] * (x - 1) + sum[3] * (x - 2) - sum[4] * (x - 3) + ... + sum[x] * 1</code> ,其中&nbsp;<code>sum[i]</code>&nbsp;是第 <code>i</code>&nbsp;个子数组的和。更正式的,能量值是满足&nbsp;<code>1 &lt;= i &lt;= x</code>&nbsp;的所有&nbsp;<code>i</code>&nbsp;对应的&nbsp;<code>(-1)<sup>i+1</sup> * sum[i] * (x - i + 1)</code>&nbsp;之和。</p>
<p>你需要在 <code>nums</code>&nbsp;中选择 <code>k</code>&nbsp;<strong>不相交</strong><strong>子数组</strong>&nbsp;,使得&nbsp;<strong>能量值最大</strong>&nbsp;</p>
<p>请你返回可以得到的 <strong>最大</strong><strong>能量值</strong>&nbsp;</p>
<p><strong>注意</strong>,选出来的所有子数组&nbsp;<strong></strong>&nbsp;需要覆盖整个数组。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [1,2,3,-1,2], k = 3
<b>输出:</b>22
<b>解释:</b>选择 3 个子数组的最好方式是选择nums[0..2] nums[3..3] 和 nums[4..4] 。能量值为 (1 + 2 + 3) * 3 - (-1) * 2 + 2 * 1 = 22 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [12,-2,-2,-2,-2], k = 5
<b>输出:</b>64
<b>解释:</b>唯一一种选 5 个不相交子数组的方案是nums[0..0] nums[1..1] nums[2..2] nums[3..3] 和 nums[4..4] 。能量值为 12 * 5 - (-2) * 4 + (-2) * 3 - (-2) * 2 + (-2) * 1 = 64 。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>nums = [-1,-2,-3], k = 1
<b>输出:</b>-1
<b>解释:</b>选择 1 个子数组的最优方案是nums[0..0] 。能量值为 -1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 10<sup>4</sup></code></li>
<li><code>-10<sup>9</sup> &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= k &lt;= n</code></li>
<li><code>1 &lt;= n * k &lt;= 10<sup>6</sup></code></li>
<li><code>k</code> 是奇数。</li>
</ul>

View File

@@ -0,0 +1,32 @@
<p>给你一个下标从 <strong>0</strong> 开始的整数矩阵 <code>grid</code> 和一个整数 <code>k</code></p>
<p>返回包含 <code>grid</code> 左上角元素、元素和小于或等于 <code>k</code><strong><span data-keyword="submatrix">子矩阵</span></strong>的数目。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2024/01/01/example1.png" style="padding: 10px; background: #fff; border-radius: .5rem;" />
<pre>
<strong>输入:</strong>grid = [[7,6,3],[6,6,1]], k = 18
<strong>输出:</strong>4
<strong>解释:</strong>如上图所示,只有 4 个子矩阵满足:包含 grid 的左上角元素,并且元素和小于或等于 18 。</pre>
<p><strong class="example">示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2024/01/01/example21.png" style="padding: 10px; background: #fff; border-radius: .5rem;" />
<pre>
<strong>输入:</strong>grid = [[7,2,9],[1,5,0],[2,6,6]], k = 20
<strong>输出:</strong>6
<strong>解释:</strong>如上图所示,只有 6 个子矩阵满足:包含 grid 的左上角元素,并且元素和小于或等于 20 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>m == grid.length </code></li>
<li><code>n == grid[i].length</code></li>
<li><code>1 &lt;= n, m &lt;= 1000 </code></li>
<li><code>0 &lt;= grid[i][j] &lt;= 1000</code></li>
<li><code>1 &lt;= k &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,52 @@
<p>给你一棵无根带权树,树中总共有 <code>n</code>&nbsp;个节点,分别表示 <code>n</code>&nbsp;个服务器,服务器从 <code>0</code>&nbsp;<code>n - 1</code>&nbsp;编号。同时给你一个数组&nbsp;<code>edges</code>&nbsp;,其中&nbsp;<code>edges[i] = [a<sub>i</sub>, b<sub>i</sub>, weight<sub>i</sub>]</code>&nbsp;表示节点&nbsp;<code>a<sub>i</sub></code>&nbsp;<code>b<sub>i</sub></code>&nbsp;之间有一条双向边,边的权值为&nbsp;<code>weight<sub>i</sub></code>&nbsp;。再给你一个整数&nbsp;<code>signalSpeed</code>&nbsp;</p>
<p>如果两个服务器 <code>a</code>&nbsp;<code>b</code>&nbsp;<code>c</code>&nbsp;满足以下条件,那么我们称服务器 <code>a</code>&nbsp;<code>b</code>&nbsp;是通过服务器 <code>c</code>&nbsp;<strong>可连接的</strong>&nbsp;</p>
<ul>
<li><code>a &lt; b</code>&nbsp;<code>a != c</code>&nbsp;<code>b != c</code>&nbsp;</li>
<li>&nbsp;<code>c</code>&nbsp;&nbsp;<code>a</code>&nbsp;的距离是可以被&nbsp;<code>signalSpeed</code>&nbsp;整除的。</li>
<li>&nbsp;<code>c</code>&nbsp;&nbsp;<code>b</code>&nbsp;的距离是可以被&nbsp;<code>signalSpeed</code>&nbsp;整除的。</li>
<li>&nbsp;<code>c</code>&nbsp;&nbsp;<code>b</code>&nbsp;的路径与从&nbsp;<code>c</code>&nbsp;&nbsp;<code>a</code>&nbsp;的路径没有任何公共边。</li>
</ul>
<p>请你返回一个长度为 <code>n</code>&nbsp;的整数数组&nbsp;<code>count</code>&nbsp;,其中&nbsp;<code>count[i]</code> 表示通过服务器&nbsp;<code>i</code>&nbsp;<strong>可连接</strong>&nbsp;的服务器对的&nbsp;<strong>数目</strong>&nbsp;</p>
<p>&nbsp;</p>
<p><b>示例 1</b></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2024/01/21/example22.png" style="width: 438px; height: 243px; padding: 10px; background: #fff; border-radius: .5rem;" /></p>
<pre>
<b>输入:</b>edges = [[0,1,1],[1,2,5],[2,3,13],[3,4,9],[4,5,2]], signalSpeed = 1
<b>输出:</b>[0,4,6,6,4,0]
<b>解释:</b>由于 signalSpeed 等于 1 count[c] 等于所有从 c 开始且没有公共边的路径对数目。
在输入图中count[c] 等于服务器 c 左边服务器数目乘以右边服务器数目。
</pre>
<p><strong class="example">示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2024/01/21/example11.png" style="width: 495px; height: 484px; padding: 10px; background: #fff; border-radius: .5rem;" /></p>
<pre>
<b>输入:</b>edges = [[0,6,3],[6,5,3],[0,3,1],[3,2,7],[3,1,6],[3,4,2]], signalSpeed = 3
<b>输出:</b>[2,0,0,0,0,0,2]
<b>解释:</b>通过服务器 0 ,有 2 个可连接服务器对(4, 5) 和 (4, 6) 。
通过服务器 6 ,有 2 个可连接服务器对 (4, 5) 和 (0, 5) 。
所有服务器对都必须通过服务器 0 或 6 才可连接,所以其他服务器对应的可连接服务器对数目都为 0 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= n &lt;= 1000</code></li>
<li><code>edges.length == n - 1</code></li>
<li><code>edges[i].length == 3</code></li>
<li><code>0 &lt;= a<sub>i</sub>, b<sub>i</sub> &lt; n</code></li>
<li><code>edges[i] = [a<sub>i</sub>, b<sub>i</sub>, weight<sub>i</sub>]</code><!-- notionvc: a2623897-1bb1-4c07-84b6-917ffdcd83ec --></li>
<li><code>1 &lt;= weight<sub>i</sub> &lt;= 10<sup>6</sup></code></li>
<li><code>1 &lt;= signalSpeed &lt;= 10<sup>6</sup></code></li>
<li>输入保证&nbsp;<code>edges</code>&nbsp;构成一棵合法的树。</li>
</ul>

View File

@@ -0,0 +1,50 @@
<p>给你一个下标从 <strong>0</strong> 开始、大小为 <code>n x n</code> 的矩阵 <code>grid</code> ,其中 <code>n</code> 为奇数,且 <code>grid[r][c]</code> 的值为 <code>0</code><code>1</code><code>2</code></p>
<p>如果一个单元格属于以下三条线中的任一一条,我们就认为它是字母 <strong>Y</strong> 的一部分:</p>
<ul>
<li>从左上角单元格开始到矩阵中心单元格结束的对角线。</li>
<li>从右上角单元格开始到矩阵中心单元格结束的对角线。</li>
<li>从中心单元格开始到矩阵底部边界结束的垂直线。</li>
</ul>
<p>当且仅当满足以下全部条件时,可以判定矩阵上写有字母 <strong>Y </strong></p>
<ul>
<li>属于 Y 的所有单元格的值相等。</li>
<li>不属于 Y 的所有单元格的值相等。</li>
<li>属于 Y 的单元格的值与不属于Y的单元格的值不同。</li>
</ul>
<p>每次操作你可以将任意单元格的值改变为 <code>0</code><code>1</code><code>2</code> 。返回在矩阵上写出字母 Y 所需的 <strong>最少 </strong>操作次数。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2024/01/22/y2.png" style="width: 461px; height: 121px;" />
<pre>
<strong>输入:</strong>grid = [[1,2,2],[1,1,0],[0,1,0]]
<strong>输出:</strong>3
<strong>解释:</strong>将在矩阵上写出字母 Y 需要执行的操作用蓝色高亮显示。操作后,所有属于 Y 的单元格(加粗显示)的值都为 1 ,而不属于 Y 的单元格的值都为 0 。
可以证明,写出 Y 至少需要进行 3 次操作。
</pre>
<p><strong class="example">示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2024/01/22/y3.png" style="width: 701px; height: 201px;" />
<pre>
<strong>输入:</strong>grid = [[0,1,0,1,0],[2,1,0,1,2],[2,2,2,0,1],[2,2,2,2,2],[2,1,2,2,2]]
<strong>输出:</strong>12
<strong>解释:</strong>将在矩阵上写出字母 Y 需要执行的操作用蓝色高亮显示。操作后,所有属于 Y 的单元格(加粗显示)的值都为 0 ,而不属于 Y 的单元格的值都为 2 。
可以证明,写出 Y 至少需要进行 12 次操作。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>3 &lt;= n &lt;= 49</code></li>
<li><code>n == grid.length == grid[i].length</code></li>
<li><code>0 &lt;= grid[i][j] &lt;= 2</code></li>
<li><code>n</code> 为奇数。</li>
</ul>

View File

@@ -0,0 +1,44 @@
<p>给你一个字符串 <code>s</code> ,请你判断字符串 <code>s</code> 是否存在一个长度为 <code>2</code> 的子字符串,在其反转后的字符串中也出现。</p>
<p>如果存在这样的子字符串,返回 <code>true</code>;如果不存在,返回 <code>false</code></p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">s = "leetcode"</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">true</span></p>
<p><strong>解释:</strong>子字符串 <code>"ee"</code> 的长度为 <code>2</code>,它也出现在 <code>reverse(s) == "edocteel"</code> 中。</p>
</div>
<p><strong class="example">示例 2</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">s = "abcba"</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">true</span></p>
<p><strong>解释:</strong>所有长度为 <code>2</code> 的子字符串 <code>"ab"</code><code>"bc"</code><code>"cb"</code><code>"ba"</code> 也都出现在 <code>reverse(s) == "abcba"</code> 中。</p>
</div>
<p><strong class="example">示例 3</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">s = "abcd"</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">false</span></p>
<p><strong>解释:</strong>字符串 <code>s</code> 中不存在满足「在其反转后的字符串中也出现」且长度为 <code>2</code> 的子字符串。</p>
</div>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 100</code></li>
<li>字符串 <code>s</code> 仅由小写英文字母组成。</li>
</ul>

View File

@@ -0,0 +1,46 @@
<p>给你一个下标从 <strong>1</strong> 开始、包含<strong> 不同 </strong>整数的数组 <code>nums</code> ,数组长度为 <code>n</code></p>
<p>你需要通过 <code>n</code> 次操作,将 <code>nums</code> 中的所有元素分配到两个数组 <code>arr1</code><code>arr2</code> 中。在第一次操作中,将 <code>nums[1]</code> 追加到 <code>arr1</code> 。在第二次操作中,将 <code>nums[2]</code> 追加到 <code>arr2</code> 。之后,在第 <code>i</code> 次操作中:</p>
<ul>
<li>如果 <code>arr1</code> 的最后一个元素 <strong>大于 </strong><code>arr2</code> 的最后一个元素,就将 <code>nums[i]</code> 追加到 <code>arr1</code> 。否则,将 <code>nums[i]</code> 追加到 <code>arr2</code></li>
</ul>
<p>通过连接数组 <code>arr1</code><code>arr2</code> 形成数组 <code>result</code> 。例如,如果 <code>arr1 == [1,2,3]</code><code>arr2 == [4,5,6]</code> ,那么 <code>result = [1,2,3,4,5,6]</code></p>
<p>返回数组 <code>result</code></p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [2,1,3]
<strong>输出:</strong>[2,3,1]
<strong>解释:</strong>在前两次操作后arr1 = [2] arr2 = [1] 。
在第 3 次操作中,由于 arr1 的最后一个元素大于 arr2 的最后一个元素2 &gt; 1将 nums[3] 追加到 arr1 。
3 次操作后arr1 = [2,3] arr2 = [1] 。
因此,连接形成的数组 result 是 [2,3,1] 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [5,4,3,8]
<strong>输出:</strong>[5,3,4,8]
<strong>解释:</strong>在前两次操作后arr1 = [5] arr2 = [4] 。
在第 3 次操作中,由于 arr1 的最后一个元素大于 arr2 的最后一个元素5 &gt; 4将 nums[3] 追加到 arr1 ,因此 arr1 变为 [5,3] 。
在第 4 次操作中,由于 arr2 的最后一个元素大于 arr1 的最后一个元素4 &gt; 3将 nums[4] 追加到 arr2 ,因此 arr2 变为 [4,8] 。
4 次操作后arr1 = [5,3] arr2 = [4,8] 。
因此,连接形成的数组 result 是 [5,3,4,8] 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>3 &lt;= n &lt;= 50</code></li>
<li><code>1 &lt;= nums[i] &lt;= 100</code></li>
<li><code>nums</code>中的所有元素都互不相同。</li>
</ul>

View File

@@ -0,0 +1,61 @@
<p>给你一个下标从 <strong>1</strong> 开始、长度为 <code>n</code> 的整数数组 <code>nums</code></p>
<p>现定义函数 <code>greaterCount</code> ,使得 <code>greaterCount(arr, val)</code> 返回数组 <code>arr</code><strong> 严格大于</strong> <code>val</code> 的元素数量。</p>
<p>你需要使用 <code>n</code> 次操作,将 <code>nums</code> 的所有元素分配到两个数组 <code>arr1</code><code>arr2</code> 中。在第一次操作中,将 <code>nums[1]</code> 追加到 <code>arr1</code> 。在第二次操作中,将 <code>nums[2]</code> 追加到 <code>arr2</code> 。之后,在第 <code>i</code> 次操作中:</p>
<ul>
<li>如果 <code>greaterCount(arr1, nums[i]) &gt; greaterCount(arr2, nums[i])</code> ,将 <code>nums[i]</code> 追加到 <code>arr1</code></li>
<li>如果 <code>greaterCount(arr1, nums[i]) &lt; greaterCount(arr2, nums[i])</code> ,将 <code>nums[i]</code> 追加到 <code>arr2</code></li>
<li>如果 <code>greaterCount(arr1, nums[i]) == greaterCount(arr2, nums[i])</code> ,将 <code>nums[i]</code> 追加到元素数量较少的数组中。</li>
<li>如果仍然相等,那么将 <code>nums[i]</code> 追加到 <code>arr1</code></li>
</ul>
<p>连接数组 <code>arr1</code><code>arr2</code> 形成数组 <code>result</code> 。例如,如果 <code>arr1 == [1,2,3]</code><code>arr2 == [4,5,6]</code> ,那么 <code>result = [1,2,3,4,5,6]</code></p>
<p>返回整数数组 <code>result</code></p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [2,1,3,3]
<strong>输出:</strong>[2,3,1,3]
<strong>解释:</strong>在前两次操作后arr1 = [2] arr2 = [1] 。
在第 3 次操作中,两个数组中大于 3 的元素数量都是零,并且长度相等,因此,将 nums[3] 追加到 arr1 。
在第 4 次操作中,两个数组中大于 3 的元素数量都是零,但 arr2 的长度较小,因此,将 nums[4] 追加到 arr2 。
在 4 次操作后arr1 = [2,3] arr2 = [1,3] 。
因此,连接形成的数组 result 是 [2,3,1,3] 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [5,14,3,1,2]
<strong>输出:</strong>[5,3,1,2,14]
<strong>解释:</strong>在前两次操作后arr1 = [5] arr2 = [14] 。
在第 3 次操作中,两个数组中大于 3 的元素数量都是一,并且长度相等,因此,将 nums[3] 追加到 arr1 。
在第 4 次操作中arr1 中大于 1 的元素数量大于 arr2 中的数量2 &gt; 1因此将 nums[4] 追加到 arr1 。
在第 5 次操作中arr1 中大于 2 的元素数量大于 arr2 中的数量2 &gt; 1因此将 nums[5] 追加到 arr1 。
在 5 次操作后arr1 = [5,3,1,2] arr2 = [14] 。
因此,连接形成的数组 result 是 [5,3,1,2,14] 。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<strong>输入:</strong>nums = [3,3,3,3]
<strong>输出:</strong>[3,3,3,3]
<strong>解释:</strong>在 4 次操作后arr1 = [3,3] arr2 = [3,3] 。
因此,连接形成的数组 result 是 [3,3,3,3] 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>3 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,51 @@
<p>给你一个长度为 <code>n</code> 的数组 <code>happiness</code> ,以及一个<strong> 正整数 </strong><code>k</code></p>
<p><code>n</code> 个孩子站成一队,其中第 <code>i</code> 个孩子的 <strong>幸福值</strong><strong> </strong><code>happiness[i]</code> 。你计划组织 <code>k</code> 轮筛选从这 <code>n</code> 个孩子中选出 <code>k</code> 个孩子。</p>
<p>在每一轮选择一个孩子时,所有<strong> 尚未 </strong>被选中的孩子的 <strong>幸福值 </strong>将减少 <code>1</code> 。注意,幸福值<strong> 不能 </strong>变成负数,且只有在它是正数的情况下才会减少。</p>
<p>选择 <code>k</code> 个孩子,并使你选中的孩子幸福值之和最大,返回你能够得到的<strong> </strong><strong>最大值</strong></p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>happiness = [1,2,3], k = 2
<strong>输出:</strong>4
<strong>解释:</strong>按以下方式选择 2 个孩子:
- 选择幸福值为 3 的孩子。剩余孩子的幸福值变为 [0,1] 。
- 选择幸福值为 1 的孩子。剩余孩子的幸福值变为 [0] 。注意幸福值不能小于 0 。
所选孩子的幸福值之和为 3 + 1 = 4 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>happiness = [1,1,1,1], k = 2
<strong>输出:</strong>1
<strong>解释:</strong>按以下方式选择 2 个孩子:
- 选择幸福值为 1 的任意一个孩子。剩余孩子的幸福值变为 [0,0,0] 。
- 选择幸福值为 0 的孩子。剩余孩子的幸福值变为 [0,0] 。
所选孩子的幸福值之和为 1 + 0 = 1 。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<strong>输入:</strong>happiness = [2,3,4,5], k = 1
<strong>输出:</strong>5
<strong>解释:</strong>按以下方式选择 1 个孩子:
- 选择幸福值为 5 的孩子。剩余孩子的幸福值变为 [1,2,3] 。
所选孩子的幸福值之和为 5 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n == happiness.length &lt;= 2 * 10<sup>5</sup></code></li>
<li><code>1 &lt;= happiness[i] &lt;= 10<sup>8</sup></code></li>
<li><code>1 &lt;= k &lt;= n</code></li>
</ul>

View File

@@ -0,0 +1,49 @@
<p>给你一个字符串 <code>word</code> 和一个整数 <code>k</code></p>
<p>如果&nbsp;<code>|freq(word[i]) - freq(word[j])| &lt;= k</code> 对于字符串中所有下标 <code>i</code><code>j</code>&nbsp; 都成立,则认为 <code>word</code><strong>k 特殊字符串</strong></p>
<p>此处,<code>freq(x)</code> 表示字符 <code>x</code><code>word</code> 中的<span data-keyword="frequency-letter">出现频率</span>,而 <code>|y|</code> 表示 <code>y</code> 的绝对值。</p>
<p>返回使 <code>word</code> 成为 <strong>k 特殊字符串</strong> 需要删除的字符的最小数量。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">word = "aabcaba", k = 0</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">3</span></p>
<p><strong>解释:</strong>可以删除 <code>2</code><code>"a"</code><code>1</code><code>"c"</code> 使 <code>word</code> 成为 <code>0</code> 特殊字符串。<code>word</code> 变为 <code>"baba"</code>,此时 <code>freq('a') == freq('b') == 2</code></p>
</div>
<p><strong class="example">示例 2</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">word = "dabdcbdcdcd", k = 2</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">2</span></p>
<p><strong>解释:</strong>可以删除 <code>1</code><code>"a"</code><code>1</code><code>"d"</code> 使 <code>word</code> 成为 <code>2</code> 特殊字符串。<code>word</code> 变为 <code>"bdcbdcdcd"</code>,此时 <code>freq('b') == 2</code><code>freq('c') == 3</code><code>freq('d') == 4</code></p>
</div>
<p><strong class="example">示例 3</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">word = "aaabaaa", k = 2</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">1</span></p>
<p><strong>解释:</strong>可以删除<strong> </strong>1 个 <code>"b"</code> 使 <code>word</code> 成为 <code>2</code>特殊字符串。因此,<code>word</code> 变为 <code>"aaaaaa"</code>,此时每个字母的频率都是 <code>6</code></p>
</div>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= word.length &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= k &lt;= 10<sup>5</sup></code></li>
<li><code>word</code> 仅由小写英文字母组成。</li>
</ul>

View File

@@ -0,0 +1,57 @@
<p>给你一个长度为 <code>n</code>&nbsp;下标从 <strong>0</strong>&nbsp;开始的正整数数组&nbsp;<code>nums</code>&nbsp;</p>
<p>同时给你一个长度为 <code>m</code>&nbsp;的二维操作数组&nbsp;<code>queries</code>&nbsp;,其中&nbsp;<code>queries[i] = [index<sub>i</sub>, k<sub>i</sub>]</code>&nbsp;</p>
<p>一开始,数组中的所有元素都 <strong>未标记</strong>&nbsp;</p>
<p>你需要依次对数组执行 <code>m</code>&nbsp;次操作,第 <code>i</code>&nbsp;次操作中,你需要执行:</p>
<ul>
<li>如果下标&nbsp;<code>index<sub>i</sub></code>&nbsp;对应的元素还没标记,那么标记这个元素。</li>
<li>然后标记&nbsp;<code>k<sub>i</sub></code>&nbsp;个数组中还没有标记的&nbsp;<strong>最小</strong>&nbsp;元素。如果有元素的值相等,那么优先标记它们中下标较小的。如果少于&nbsp;<code>k<sub>i</sub></code>&nbsp;个未标记元素存在,那么将它们全部标记。</li>
</ul>
<p>请你返回一个长度为 <code>m</code>&nbsp;的数组 <code>answer</code>&nbsp;,其中<em>&nbsp;</em><code>answer[i]</code>是第&nbsp;<code>i</code>&nbsp;次操作后数组中还没标记元素的&nbsp;<strong></strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">nums = [1,2,2,1,2,3,1], queries = [[1,2],[3,3],[4,2]]</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">[8,3,0]</span></p>
<p><strong>解释:</strong></p>
<p>我们依次对数组做以下操作:</p>
<ul>
<li>标记下标为&nbsp;<code>1</code>&nbsp;的元素,同时标记&nbsp;<code>2</code>&nbsp;个未标记的最小元素。标记完后数组为&nbsp;<code>nums = [<em><strong>1</strong></em>,<em><strong>2</strong></em>,2,<em><strong>1</strong></em>,2,3,1]</code>&nbsp;。未标记元素的和为&nbsp;<code>2 + 2 + 3 + 1 = 8</code>&nbsp;</li>
<li>标记下标为&nbsp;<code>3</code>&nbsp;的元素,由于它已经被标记过了,所以我们忽略这次标记,同时标记最靠前的&nbsp;<code>3</code>&nbsp;个未标记的最小元素。标记完后数组为&nbsp;<code>nums = [<em><strong>1</strong></em>,<em><strong>2</strong></em>,<em><strong>2</strong></em>,<em><strong>1</strong></em>,<em><strong>2</strong></em>,3,<em><strong>1</strong></em>]</code>&nbsp;。未标记元素的和为&nbsp;<code>3</code>&nbsp;</li>
<li>标记下标为 <code>4</code>&nbsp;的元素,由于它已经被标记过了,所以我们忽略这次标记,同时标记最靠前的 <code>2</code>&nbsp;个未标记的最小元素。标记完后数组为&nbsp;<code>nums = [<em><strong>1</strong></em>,<em><strong>2</strong></em>,<em><strong>2</strong></em>,<em><strong>1</strong></em>,<em><strong>2</strong></em>,<em><strong>3</strong></em>,<em><strong>1</strong></em>]</code>&nbsp;。未标记元素的和为&nbsp;<code>0</code>&nbsp;</li>
</ul>
</div>
<p><strong class="example">示例 2</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">nums = [1,4,2,3], queries = [[0,1]]</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">[7]</span></p>
<p><strong>解释:</strong>我们执行一次操作,将下标为&nbsp;<code>0</code>&nbsp;处的元素标记,并且标记最靠前的&nbsp;<code>1</code>&nbsp;个未标记的最小元素。标记完后数组为&nbsp;<code>nums = [<em><strong>1</strong></em>,4,<em><strong>2</strong></em>,3]</code>&nbsp;。未标记元素的和为&nbsp;<code>4 + 3 = 7</code>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == nums.length</code></li>
<li><code>m == queries.length</code></li>
<li><code>1 &lt;= m &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>5</sup></code></li>
<li><code>queries[i].length == 2</code></li>
<li><code>0 &lt;= index<sub>i</sub>, k<sub>i</sub> &lt;= n - 1</code></li>
</ul>

View File

@@ -0,0 +1,60 @@
<p>给你一个下标从 <strong>0</strong> 开始的二进制数组 <code>nums</code>,其长度为 <code>n</code> ;另给你一个 <strong>正整数 </strong><code>k</code> 以及一个 <strong>非负整数 </strong><code>maxChanges</code></p>
<p>Alice 在玩一个游戏,游戏的目标是让&nbsp;Alice 使用 <strong>最少 </strong>数量的 <strong>行动 </strong>次数从 <code>nums</code> 中拾起 <code>k</code> 个 1 。游戏开始时Alice 可以选择数组 <code>[0, n - 1]</code> 范围内的任何索引&nbsp;<code>aliceIndex</code> 站立。如果 <code>nums[aliceIndex] == 1</code> Alice 会拾起一个 1 ,并且 <code>nums[aliceIndex]</code> 变成<code>0</code>(这<strong> 不算 </strong>作一次行动。之后Alice 可以执行 <strong>任意数量</strong><strong>行动</strong><strong>包括</strong><strong>零次</strong>),在每次行动中&nbsp;Alice 必须 <strong>恰好 </strong>执行以下动作之一:</p>
<ul>
<li>选择任意一个下标 <code>j != aliceIndex</code> 且满足 <code>nums[j] == 0</code> ,然后将 <code>nums[j]</code> 设置为 <code>1</code> 。这个动作最多可以执行 <code>maxChanges</code> 次。</li>
<li>选择任意两个相邻的下标 <code>x</code><code>y</code><code>|x - y| == 1</code>)且满足 <code>nums[x] == 1</code>, <code>nums[y] == 0</code> ,然后交换它们的值(将 <code>nums[y] = 1</code><code>nums[x] = 0</code>)。如果 <code>y == aliceIndex</code>,在这次行动后&nbsp;Alice 拾起一个 1 ,并且 <code>nums[y]</code> 变成 <code>0</code></li>
</ul>
<p>返回&nbsp;Alice 拾起 <strong>恰好 </strong><code>k</code> 个 1 所需的 <strong>最少 </strong>行动次数。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">nums = [1,1,0,0,0,1,1,0,0,1], k = 3, maxChanges = 1</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">3</span></p>
<p><strong>解释:</strong>如果游戏开始时&nbsp;Alice 在 <code>aliceIndex == 1</code> 的位置上,按照以下步骤执行每个动作,他可以利用 <code>3</code> 次行动拾取 <code>3</code> 个 1 </p>
<ul>
<li>游戏开始时&nbsp;Alice 拾取了一个 1 <code>nums[1]</code> 变成了 <code>0</code>。此时 <code>nums</code> 变为 <code>[1,<strong><u>1</u></strong>,1,0,0,1,1,0,0,1]</code></li>
<li>选择 <code>j == 2</code> 并执行第一种类型的动作。<code>nums</code> 变为 <code>[1,<strong><u>0</u></strong>,1,0,0,1,1,0,0,1]</code></li>
<li>选择 <code>x == 2</code><code>y == 1</code> ,并执行第二种类型的动作。<code>nums</code> 变为 <code>[1,<strong><u>1</u></strong>,0,0,0,1,1,0,0,1]</code> 。由于 <code>y == aliceIndex</code>Alice 拾取了一个 1 <code>nums</code> 变为&nbsp; <code>[1,<strong><u>0</u></strong>,0,0,0,1,1,0,0,1]</code></li>
<li>选择 <code>x == 0</code><code>y == 1</code> ,并执行第二种类型的动作。<code>nums</code> 变为 <code>[0,<strong><u>1</u></strong>,0,0,0,1,1,0,0,1]</code> 。由于 <code>y == aliceIndex</code>Alice 拾取了一个 1 <code>nums</code> 变为&nbsp; <code>[0,<strong><u>0</u></strong>,0,0,0,1,1,0,0,1]</code></li>
</ul>
<p>请注意Alice 也可能执行其他的 <code>3</code> 次行动序列达成拾取 <code>3</code> 个 1 。</p>
</div>
<p><strong class="example">示例 2</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;"><!-- 以下是示例内容的中文翻译同时保留了原有的HTML格式和注释 -->
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">nums = [0,0,0,0], k = 2, maxChanges = 3</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">4</span></p>
<p><strong>解释:</strong>如果游戏开始时&nbsp;Alice 在 <code>aliceIndex == 0</code> 的位置上,按照以下步骤执行每个动作,他可以利用 <code>4</code> 次行动拾取 <code>2</code> 个 1 </p>
<ul>
<li>选择 <code>j == 1</code> 并执行第一种类型的动作。<code>nums</code> 变为 <code>[<strong><u>0</u></strong>,1,0,0]</code></li>
<li>选择 <code>x == 1</code><code>y == 0</code> ,并执行第二种类型的动作。<code>nums</code> 变为 <code>[<strong><u>1</u></strong>,0,0,0]</code> 。由于 <code>y == aliceIndex</code>Alice 拾起了一个 1 <code>nums</code> 变为 <code>[<strong><u>0</u></strong>,0,0,0]</code></li>
<li>再次选择 <code>j == 1</code> 并执行第一种类型的动作。<code>nums</code> 变为 <code>[<strong><u>0</u></strong>,1,0,0]</code></li>
<li>再次选择 <code>x == 1</code><code>y == 0</code> ,并执行第二种类型的动作。<code>nums</code> 变为 <code>[<strong><u>1</u></strong>,0,0,0]</code> 。由于<code>y == aliceIndex</code>Alice 拾起了一个 1 <code>nums</code> 变为 <code>[<strong><u>0</u></strong>,0,0,0]</code></li>
</ul>
</div>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= nums[i] &lt;= 1</code></li>
<li><code>1 &lt;= k &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= maxChanges &lt;= 10<sup>5</sup></code></li>
<li><code>maxChanges + sum(nums) &gt;= k</code></li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给你一个数组 <code>arr</code>&nbsp;,数组中有 <code>n</code>&nbsp;<b>非空</b>&nbsp;字符串。</p>
<p>请你求出一个长度为 <code>n</code>&nbsp;的字符串&nbsp;<code>answer</code>&nbsp;,满足:</p>
<ul>
<li><code>answer[i]</code>&nbsp;<code>arr[i]</code>&nbsp;<strong>最短</strong>&nbsp;的子字符串,且它不是 <code>arr</code>&nbsp;中其他任何字符串的子字符串。如果有多个这样的子字符串存在,<code>answer[i]</code>&nbsp;应该是它们中字典序最小的一个。如果不存在这样的子字符串,<code>answer[i]</code>&nbsp;为空字符串。</li>
</ul>
<p>请你返回数组<em>&nbsp;</em><code>answer</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>arr = ["cab","ad","bad","c"]
<b>输出:</b>["ab","","ba",""]
<b>解释:</b>求解过程如下:
- 对于字符串 "cab" ,最短没有在其他字符串中出现过的子字符串是 "ca" 或者 "ab" ,我们选择字典序更小的子字符串,也就是 "ab" 。
- 对于字符串 "ad" ,不存在没有在其他字符串中出现过的子字符串。
- 对于字符串 "bad" ,最短没有在其他字符串中出现过的子字符串是 "ba" 。
- 对于字符串 "c" ,不存在没有在其他字符串中出现过的子字符串。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>arr = ["abc","bcd","abcd"]
<b>输出:</b>["","","abcd"]
<b>解释:</b>求解过程如下:
- 对于字符串 "abc" ,不存在没有在其他字符串中出现过的子字符串。
- 对于字符串 "bcd" ,不存在没有在其他字符串中出现过的子字符串。
- 对于字符串 "abcd" ,最短没有在其他字符串中出现过的子字符串是 "abcd" 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == arr.length</code></li>
<li><code>2 &lt;= n &lt;= 100</code></li>
<li><code>1 &lt;= arr[i].length &lt;= 20</code></li>
<li><code>arr[i]</code>&nbsp;只包含小写英文字母。</li>
</ul>

View File

@@ -0,0 +1,61 @@
<p>给你一个字符串&nbsp;<code>s</code>&nbsp;<code>s[i]</code>&nbsp;要么是小写英文字母,要么是问号&nbsp;<code>'?'</code>&nbsp;</p>
<p>对于长度为 <code>m</code>&nbsp;<strong></strong>&nbsp;含有小写英文字母的字符串 <code>t</code>&nbsp;,我们定义函数&nbsp;<code>cost(i)</code>&nbsp;为下标 <code>i</code>&nbsp;之前(也就是范围 <code>[0, i - 1]</code>&nbsp;中)出现过与&nbsp;<code>t[i]</code>&nbsp;<strong>相同</strong>&nbsp;字符出现的次数。</p>
<p>字符串 <code>t</code>&nbsp;&nbsp;<strong>分数</strong>&nbsp;为所有下标&nbsp;<code>i</code>&nbsp;&nbsp;<code>cost(i)</code>&nbsp;<strong></strong>&nbsp;</p>
<p>比方说,字符串&nbsp;<code>t = "aab"</code>&nbsp;</p>
<ul>
<li><code>cost(0) = 0</code></li>
<li><code>cost(1) = 1</code></li>
<li><code>cost(2) = 0</code></li>
<li>所以,字符串&nbsp;<code>"aab"</code>&nbsp;的分数为&nbsp;<code>0 + 1 + 0 = 1</code>&nbsp;</li>
</ul>
<p>你的任务是用小写英文字母&nbsp;<strong>替换</strong> <code>s</code>&nbsp;<strong>所有</strong> 问号,使 <code>s</code>&nbsp;<strong>分数</strong><strong>最小&nbsp;</strong></p>
<p>请你返回替换所有问号<em>&nbsp;</em><code>'?'</code>&nbsp;之后且分数最小的字符串。如果有多个字符串的&nbsp;<strong>分数最小</strong>&nbsp;,那么返回字典序最小的一个。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">s = "???" </span></p>
<p><strong>输出:</strong>&nbsp;<span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">"abc" </span></p>
<p><strong>解释:</strong>这个例子中,我们将 <code>s</code>&nbsp;中的问号&nbsp;<code>'?'</code>&nbsp;替换得到&nbsp;<code>"abc"</code>&nbsp;</p>
<p>对于字符串&nbsp;<code>"abc"</code>&nbsp;<code>cost(0) = 0</code>&nbsp;<code>cost(1) = 0</code>&nbsp;&nbsp;<code>cost(2) = 0</code>&nbsp;</p>
<p><code>"abc"</code>&nbsp;的分数为&nbsp;<code>0</code>&nbsp;</p>
<p>其他修改 <code>s</code>&nbsp;得到分数 <code>0</code>&nbsp;的字符串为&nbsp;<code>"cba"</code>&nbsp;<code>"abz"</code>&nbsp;&nbsp;<code>"hey"</code>&nbsp;</p>
<p>这些字符串中,我们返回字典序最小的。</p>
</div>
<p><strong class="example">示例 2</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong> <span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">s = "a?a?"</span></p>
<p><strong>输出:</strong> <span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">"abac"</span></p>
<p><strong>解释:</strong>这个例子中,我们将&nbsp;<code>s</code>&nbsp;中的问号&nbsp;<code>'?'</code>&nbsp;替换得到&nbsp;<code>"abac"</code>&nbsp;</p>
<p>对于字符串&nbsp;<code>"abac"</code>&nbsp;<code>cost(0) = 0</code>&nbsp;<code>cost(1) = 0</code>&nbsp;<code>cost(2) = 1</code>&nbsp;&nbsp;<code>cost(3) = 0</code>&nbsp;</p>
<p><code>"abac"</code>&nbsp;的分数为&nbsp;<code>1</code>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 10<sup>5</sup></code></li>
<li><code>s[i]</code>&nbsp;要么是小写英文字母,要么是&nbsp;<code>'?'</code></li>
</ul>

View File

@@ -0,0 +1,67 @@
<p>给你一棵 <code>n</code>&nbsp;个节点的 <strong>无向</strong>&nbsp;树,节点从 <code>0</code>&nbsp;<code>n - 1</code>&nbsp;编号。树以长度为 <code>n - 1</code>&nbsp;下标从 <strong>0</strong>&nbsp;开始的二维整数数组 <code>edges</code>&nbsp;的形式给你,其中&nbsp;<code>edges[i] = [u<sub>i</sub>, v<sub>i</sub>]</code>&nbsp;表示树中节点&nbsp;<code>u<sub>i</sub></code>&nbsp;&nbsp;<code>v<sub>i</sub></code>&nbsp;之间有一条边。同时给你一个 <strong></strong>&nbsp;整数&nbsp;<code>k</code>&nbsp;和一个长度为 <code>n</code>&nbsp;下标从&nbsp;<strong>0</strong>&nbsp;开始的&nbsp;<strong>非负</strong>&nbsp;整数数组&nbsp;<code>nums</code>&nbsp;,其中&nbsp;<code>nums[i]</code>&nbsp;表示节点 <code>i</code>&nbsp;<strong>价值</strong>&nbsp;</p>
<p>Alice&nbsp;<strong>最大化</strong>&nbsp;树中所有节点价值之和。为了实现这一目标Alice 可以执行以下操作 <strong>任意</strong>&nbsp;次(<strong>包括</strong><strong>&nbsp;0 次</strong></p>
<ul>
<li>选择连接节点&nbsp;<code>u</code>&nbsp;&nbsp;<code>v</code>&nbsp;的边&nbsp;<code>[u, v]</code>&nbsp;,并将它们的值更新为:
<ul>
<li><code>nums[u] = nums[u] XOR k</code></li>
<li><code>nums[v] = nums[v] XOR k</code></li>
</ul>
</li>
</ul>
<p>请你返回 Alice 通过执行以上操作 <strong>任意次</strong>&nbsp;后,可以得到所有节点 <strong>价值之和</strong>&nbsp;<strong>最大值</strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2023/11/09/screenshot-2023-11-10-012513.png" style="width: 300px; height: 277px;padding: 10px; background: #fff; border-radius: .5rem;" /></p>
<pre>
<b>输入:</b>nums = [1,2,1], k = 3, edges = [[0,1],[0,2]]
<b>输出:</b>6
<b>解释:</b>Alice 可以通过一次操作得到最大价值和 6
- 选择边 [0,2] 。nums[0] 和 nums[2] 都变为1 XOR 3 = 2 ,数组 nums 变为:[1,2,1] -&gt; [2,2,2] 。
所有节点价值之和为 2 + 2 + 2 = 6 。
6 是可以得到最大的价值之和。
</pre>
<p><strong class="example">示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2024/01/09/screenshot-2024-01-09-220017.png" style="padding: 10px; background: rgb(255, 255, 255); border-radius: 0.5rem; width: 300px; height: 239px;" /></p>
<pre>
<b>输入:</b>nums = [2,3], k = 7, edges = [[0,1]]
<b>输出:</b>9
<b>解释:</b>Alice 可以通过一次操作得到最大和 9
- 选择边 [0,1] 。nums[0] 变为2 XOR 7 = 5 nums[1] 变为3 XOR 7 = 4 ,数组 nums 变为:[2,3] -&gt; [5,4] 。
所有节点价值之和为 5 + 4 = 9 。
9 是可以得到最大的价值之和。
</pre>
<p><strong class="example">示例 3</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2023/11/09/screenshot-2023-11-10-012641.png" style="width: 600px; height: 233px;padding: 10px; background: #fff; border-radius: .5rem;" /></p>
<pre>
<b>输入:</b>nums = [7,7,7,7,7,7], k = 3, edges = [[0,1],[0,2],[0,3],[0,4],[0,5]]
<b>输出:</b>42
<b>解释:</b>Alice 不需要执行任何操作,就可以得到最大价值之和 42 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= n == nums.length &lt;= 2 * 10<sup>4</sup></code></li>
<li><code>1 &lt;= k &lt;= 10<sup>9</sup></code></li>
<li><code>0 &lt;= nums[i] &lt;= 10<sup>9</sup></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>输入保证&nbsp;<code>edges</code>&nbsp;构成一棵合法的树。</li>
</ul>

View File

@@ -0,0 +1,34 @@
<p>给你一个整数数组&nbsp;<code>nums</code>&nbsp;,数组中的元素都是&nbsp;<strong></strong>&nbsp;整数。定义一个加密函数&nbsp;<code>encrypt</code>&nbsp;<code>encrypt(x)</code>&nbsp;将一个整数 <code>x</code>&nbsp;<strong>每一个</strong>&nbsp;数位都用 <code>x</code>&nbsp;中的&nbsp;<strong>最大</strong>&nbsp;数位替换。比方说&nbsp;<code>encrypt(523) = 555</code>&nbsp;<code>encrypt(213) = 333</code>&nbsp;</p>
<p>请你返回数组中所有元素加密后的 <strong></strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">nums = [1,2,3]</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">6</span></p>
<p><b>解释:</b>加密后的元素位&nbsp;<code>[1,2,3]</code>&nbsp;。加密元素的和为&nbsp;<code>1 + 2 + 3 == 6</code>&nbsp;</p>
</div>
<p><strong class="example">示例 2</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">nums = [10,21,31]</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">66</span></p>
<p><b>解释:</b>加密后的元素为&nbsp;<code>[11,22,33]</code>&nbsp;。加密元素的和为&nbsp;<code>11 + 22 + 33 == 66</code></p>
</div>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 50</code></li>
<li><code>1 &lt;= nums[i] &lt;= 1000</code></li>
</ul>

View File

@@ -0,0 +1,71 @@
<p>给你一个长度为 <code>n</code>&nbsp;的整数数组&nbsp;<code>nums</code>&nbsp;和一个 <strong></strong>&nbsp;整数&nbsp;<code>k</code>&nbsp;</p>
<p>一个整数数组的 <strong>能量</strong>&nbsp;定义为和 <strong>等于</strong>&nbsp;<code>k</code>&nbsp;的子序列的数目。</p>
<p>请你返回 <code>nums</code>&nbsp;中所有子序列的 <strong>能量和</strong>&nbsp;</p>
<p>由于答案可能很大,请你将它对&nbsp;<code>10<sup>9</sup> + 7</code>&nbsp;<strong>取余</strong>&nbsp;后返回。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong> <span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;"> nums = [1,2,3], k = 3 </span></p>
<p><strong>输出:</strong> <span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;"> 6 </span></p>
<p><strong>解释:</strong></p>
<p>总共有&nbsp;<code>5</code>&nbsp;个能量不为 0 的子序列:</p>
<ul>
<li>子序列&nbsp;<code>[<em><strong>1</strong></em>,<em><strong>2</strong></em>,<em><strong>3</strong></em>]</code>&nbsp;<code>2</code>&nbsp;个和为&nbsp;<code>3</code>&nbsp;的子序列:<code>[1,2,<strong><em>3</em></strong>]</code><code>[<strong><em>1</em></strong>,<strong><em>2</em></strong>,3]</code>&nbsp;</li>
<li>子序列&nbsp;<code>[<em><strong>1</strong></em>,2,<em><strong>3</strong></em>]</code>&nbsp;<code>1</code>&nbsp;个和为&nbsp;<code>3</code>&nbsp;的子序列:<code>[1,2,<strong><em>3</em></strong>]</code>&nbsp;</li>
<li>子序列&nbsp;<code>[1,<em><strong>2</strong></em>,<em><strong>3</strong></em>]</code>&nbsp;<code>1</code>&nbsp;个和为&nbsp;<code>3</code>&nbsp;的子序列:<code>[1,2,<strong><em>3</em></strong>]</code>&nbsp;</li>
<li>子序列&nbsp;<code>[<em><strong>1</strong></em>,<em><strong>2</strong></em>,3]</code>&nbsp;&nbsp;<code>1</code>&nbsp;个和为&nbsp;<code>3</code>&nbsp;的子序列:<code>[<strong><em>1</em></strong>,<strong><em>2</em></strong>,3]</code>&nbsp;</li>
<li>子序列&nbsp;<code>[1,2,<em><strong>3</strong></em>]</code>&nbsp;&nbsp;<code>1</code>&nbsp;个和为&nbsp;<code>3</code>&nbsp;的子序列:<code>[1,2,<strong><em>3</em></strong>]</code>&nbsp;</li>
</ul>
<p>所以答案为&nbsp;<code>2 + 1 + 1 + 1 + 1 = 6</code>&nbsp;</p>
</div>
<p><strong class="example">示例 2</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong> <span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;"> nums = [2,3,3], k = 5 </span></p>
<p><strong>输出:</strong> <span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;"> 4 </span></p>
<p><strong>解释:</strong></p>
<p>总共有&nbsp;<code>3</code>&nbsp;个能量不为 0 的子序列:</p>
<ul>
<li>子序列&nbsp;<code>[<em><strong>2</strong></em>,<em><strong>3</strong></em>,<em><strong>3</strong></em>]</code>&nbsp;有 2 个子序列和为&nbsp;<code>5</code>&nbsp;<code>[<strong><em>2</em></strong>,3,<strong><em>3</em></strong>]</code>&nbsp;<code>[<strong><em>2</em></strong>,<strong><em>3</em></strong>,3]</code>&nbsp;</li>
<li>子序列&nbsp;<code>[<em><strong>2</strong></em>,3,<em><strong>3</strong></em>]</code>&nbsp;有 1 个子序列和为&nbsp;<code>5</code>&nbsp;<code>[<strong><em>2</em></strong>,3,<strong><em>3</em></strong>]</code>&nbsp;</li>
<li>子序列&nbsp;<code>[<em><strong>2</strong></em>,<em><strong>3</strong></em>,3]</code>&nbsp;有 1 个子序列和为 <code>5</code>&nbsp;<code>[<strong><em>2</em></strong>,<strong><em>3</em></strong>,3]</code>&nbsp;</li>
</ul>
<p>所以答案为&nbsp;<code>2 + 1 + 1 = 4</code>&nbsp;</p>
</div>
<p><strong class="example">示例 3</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong> <span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;"> nums = [1,2,3], k = 7 </span></p>
<p><strong>输出:</strong> <span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;"> 0 </span></p>
<p><strong>解释:</strong>不存在和为 <code>7</code>&nbsp;的子序列,所以 <code>nums</code>&nbsp;的能量和为&nbsp;<code>0</code>&nbsp;</p>
</div>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 100</code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>4</sup></code></li>
<li><code>1 &lt;= k &lt;= 100</code></li>
</ul>

View File

@@ -0,0 +1,32 @@
<p>给你一个字符串 <code>s</code> 和一个字符 <code>c </code>。返回在字符串 <code>s</code> 中并且以 <code>c</code> 字符开头和结尾的<span data-keyword="substring-nonempty">非空子字符串</span>的总数。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">s = "abada", c = "a"</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">6</span></p>
<p><strong>解释:</strong><code>"a"</code> 开头和结尾的子字符串有: <code>"<strong><u>a</u></strong>bada"</code><code>"<u><strong>aba</strong></u>da"</code><code>"<u><strong>abada</strong></u>"</code><code>"ab<u><strong>a</strong></u>da"</code><code>"ab<u><strong>ada</strong></u>"</code><code>"abad<u><strong>a</strong></u>"</code></p>
</div>
<p><strong class="example">示例 2</strong></p>
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;">
<p><strong>输入:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">s = "zzz", c = "z"</span></p>
<p><strong>输出:</strong><span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">6</span></p>
<p><strong>解释:</strong>字符串 <code>s</code> 中总共有 <code>6</code> 个子字符串,并且它们都以 <code>"z"</code> 开头和结尾。</p>
</div>
<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><code>c</code> 均由小写英文字母组成。</li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给你一个下标从 <b>0</b>&nbsp;开始的整数数组&nbsp;<code>nums</code>&nbsp;和一个整数&nbsp;<code>k</code>&nbsp;</p>
<p>一次操作中,你可以删除 <code>nums</code>&nbsp;中的最小元素。</p>
<p>你需要使数组中的所有元素都大于或等于 <code>k</code>&nbsp;,请你返回需要的 <strong>最少</strong>&nbsp;操作次数。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [2,11,10,1,3], k = 10
<b>输出:</b>3
<b>解释:</b>第一次操作后nums 变为 [2, 11, 10, 3] 。
第二次操作后nums 变为 [11, 10, 3] 。
第三次操作后nums 变为 [11, 10] 。
此时,数组中的所有元素都大于等于 10 ,所以我们停止操作。
使数组中所有元素都大于等于 10 需要的最少操作次数为 3 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [1,1,2,4,9], k = 1
<b>输出:</b>0
<b>解释:</b>数组中的所有元素都大于等于 1 ,所以不需要对 nums 做任何操作。</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>nums = [1,1,2,4,9], k = 9
<b>输出:</b>4
<b>解释:</b>nums 中只有一个元素大于等于 9 ,所以需要执行 4 次操作。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 50</code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= k &lt;= 10<sup>9</sup></code></li>
<li>输入保证至少有一个满足&nbsp;<code>nums[i] &gt;= k</code>&nbsp;的下标&nbsp;<code>i</code>&nbsp;存在。</li>
</ul>

View File

@@ -0,0 +1,49 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>nums</code>&nbsp;和一个整数&nbsp;<code>k</code>&nbsp;</p>
<p>一次操作中,你将执行:</p>
<ul>
<li>选择 <code>nums</code>&nbsp;中最小的两个整数&nbsp;<code>x</code>&nbsp;<code>y</code>&nbsp;</li>
<li>&nbsp;<code>x</code>&nbsp;<code>y</code>&nbsp;<code>nums</code>&nbsp;中删除。</li>
<li>&nbsp;<code>min(x, y) * 2 + max(x, y)</code>&nbsp;添加到数组中的任意位置。</li>
</ul>
<p><b>注意,</b>只有当&nbsp;<code>nums</code>&nbsp;至少包含两个元素时,你才可以执行以上操作。</p>
<p>你需要使数组中的所有元素都大于或等于&nbsp;<code>k</code>&nbsp;,请你返回需要的&nbsp;<strong>最少</strong>&nbsp;操作次数。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [2,11,10,1,3], k = 10
<b>输出:</b>2
<b>解释:</b>第一次操作中,我们删除元素 1 和 2 ,然后添加 1 * 2 + 2 到 nums 中nums 变为 [4, 11, 10, 3] 。
第二次操作中,我们删除元素 3 和 4 ,然后添加 3 * 2 + 4 到 nums 中nums 变为 [10, 11, 10] 。
此时,数组中的所有元素都大于等于 10 ,所以我们停止操作。
使数组中所有元素都大于等于 10 需要的最少操作次数为 2 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [1,1,2,4,9], k = 20
<b>输出:</b>4
<b>解释:</b>第一次操作后nums 变为 [2, 4, 9, 3] 。
第二次操作后nums 变为 [7, 4, 9] 。
第三次操作后nums 变为 [15, 9] 。
第四次操作后nums 变为 [33] 。
此时,数组中的所有元素都大于等于 20 ,所以我们停止操作。
使数组中所有元素都大于等于 20 需要的最少操作次数为 4 。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= nums.length &lt;= 2 * 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= k &lt;= 10<sup>9</sup></code></li>
<li>输入保证答案一定存在,也就是说一定存在一个操作序列使数组中所有元素都大于等于&nbsp;<code>k</code></li>
</ul>

View File

@@ -0,0 +1,37 @@
<p>给你一个长度为 <code>n</code> 的数组 <code>apple</code> 和另一个长度为 <code>m</code> 的数组 <code>capacity</code></p>
<p>一共有 <code>n</code> 个包裹,其中第 <code>i</code> 个包裹中装着 <code>apple[i]</code> 个苹果。同时,还有 <code>m</code> 个箱子,第 <code>i</code> 个箱子的容量为 <code>capacity[i]</code> 个苹果。</p>
<p>请你选择一些箱子来将这 <code>n</code> 个包裹中的苹果重新分装到箱子中,返回你需要选择的箱子的<strong> 最小</strong> 数量。</p>
<p><strong>注意</strong>,同一个包裹中的苹果可以分装到不同的箱子中。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>apple = [1,3,2], capacity = [4,3,1,5,2]
<strong>输出:</strong>2
<strong>解释:</strong>使用容量为 4 和 5 的箱子。
总容量大于或等于苹果的总数,所以可以完成重新分装。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>apple = [5,5,5], capacity = [2,4,2,7]
<strong>输出:</strong>4
<strong>解释:</strong>需要使用所有箱子。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n == apple.length &lt;= 50</code></li>
<li><code>1 &lt;= m == capacity.length &lt;= 50</code></li>
<li><code>1 &lt;= apple[i], capacity[i] &lt;= 50</code></li>
<li>输入数据保证可以将包裹中的苹果重新分装到箱子中。</li>
</ul>