1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-09-04 23:11:41 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
This commit is contained in:
2023-09-20 00:01:18 +08:00
parent bdec4f9224
commit 83a5997ef9
69 changed files with 20736 additions and 13628 deletions

View File

@@ -0,0 +1,31 @@
<p>给你一个下标从 <strong>0</strong> 开始的二维整数数组 <code>nums</code> 表示汽车停放在数轴上的坐标。对于任意下标 <code>i</code><code>nums[i] = [start<sub>i</sub>, end<sub>i</sub>]</code> ,其中 <code>start<sub>i</sub></code> 是第 <code>i</code> 辆车的起点,<code>end<sub>i</sub></code> 是第 <code>i</code> 辆车的终点。</p>
<p>返回数轴上被车 <strong>任意部分</strong> 覆盖的整数点的数目。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [[3,6],[1,5],[4,7]]
<strong>输出:</strong>7
<strong>解释:</strong>从 1 到 7 的所有点都至少与一辆车相交,因此答案为 7 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [[1,3],[5,8]]
<strong>输出:</strong>7
<strong>解释:</strong>1、2、3、5、6、7、8 共计 7 个点满足至少与一辆车相交,因此答案为 7 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 100</code></li>
<li><code>nums[i].length == 2</code></li>
<li><code><font face="monospace">1 &lt;= start<sub>i</sub>&nbsp;&lt;= end<sub>i</sub>&nbsp;&lt;= 100</font></code></li>
</ul>

View File

@@ -0,0 +1,41 @@
<p>给你一个长度为 <code>n</code>&nbsp;下标从 <strong>0</strong>&nbsp;开始的数组&nbsp;<code>nums</code>&nbsp;,数组中的元素为&nbsp;<strong>互不相同</strong>&nbsp;的正整数。请你返回让 <code>nums</code>&nbsp;成为递增数组的 <strong>最少右移</strong>&nbsp;次数,如果无法得到递增数组,返回 <code>-1</code>&nbsp;</p>
<p>一次 <strong>右移</strong>&nbsp;指的是同时对所有下标进行操作,将下标为 <code>i</code>&nbsp;的元素移动到下标&nbsp;<code>(i + 1) % n</code>&nbsp;处。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [3,4,5,1,2]
<b>输出:</b>2
<b>解释:</b>
第一次右移后nums = [2,3,4,5,1] 。
第二次右移后nums = [1,2,3,4,5] 。
现在 nums 是递增数组了,所以答案为 2 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [1,3,5]
<b>输出:</b>0
<b>解释:</b>nums 已经是递增数组了,所以答案为 0 。</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>nums = [2,1,4]
<b>输出:</b>-1
<b>解释:</b>无法将数组变为递增数组。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 100</code></li>
<li><code>1 &lt;= nums[i] &lt;= 100</code></li>
<li><code>nums</code>&nbsp;中的整数互不相同。</li>
</ul>

View File

@@ -0,0 +1,59 @@
<p>给你一个下标从 <strong>0</strong> 开始的 <strong>非递减</strong> 整数数组&nbsp;<code>nums</code>&nbsp;</p>
<p>你可以执行以下操作任意次:</p>
<ul>
<li>选择 <strong>两个&nbsp;</strong>下标&nbsp;<code>i</code>&nbsp;<code>j</code>&nbsp;,满足&nbsp;<code>i &lt; j</code>&nbsp;&nbsp;<code>nums[i] &lt; nums[j]</code>&nbsp;</li>
<li><code>nums</code>&nbsp;中下标在&nbsp;<code>i</code>&nbsp;<code>j</code>&nbsp;处的元素删除。剩余元素按照原来的顺序组成新的数组,下标也重新从 <strong>0</strong>&nbsp;开始编号。</li>
</ul>
<p>请你返回一个整数,表示执行以上操作任意次后(可以执行 <strong>0</strong> 次),<code>nums</code>&nbsp;数组的 <strong>最小</strong>&nbsp;数组长度。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>nums = [1,3,4,9]
<b>输出:</b>0
<b>解释:</b>一开始nums = [1, 3, 4, 9] 。
第一次操作,我们选择下标 0 和 1 ,满足 nums[0] &lt; nums[1] &lt;=&gt; 1 &lt; 3 。
删除下标 0 和 1 处的元素nums 变成 [4, 9] 。
下一次操作,我们选择下标 0 和 1 ,满足 nums[0] &lt; nums[1] &lt;=&gt; 4 &lt; 9 。
删除下标 0 和 1 处的元素nums 变成空数组 [] 。
所以,可以得到的最小数组长度为 0 。</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>nums = [2,3,6,9]
<b>输出:</b>0
<b>解释:</b>一开始nums = [2, 3, 6, 9] 。
第一次操作,我们选择下标 0 和 2 ,满足 nums[0] &lt; nums[2] &lt;=&gt; 2 &lt; 6 。
删除下标 0 和 2 处的元素nums 变成 [3, 9] 。
下一次操作,我们选择下标 0 和 1 ,满足 nums[0] &lt; nums[1] &lt;=&gt; 3 &lt; 9 。
删除下标 0 和 1 处的元素nums 变成空数组 [] 。
所以,可以得到的最小数组长度为 0 。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>nums = [1,1,2]
<b>输出:</b>1
<b>解释:</b>一开始nums = [1, 1, 2] 。
第一次操作,我们选择下标 0 和 2 ,满足 nums[0] &lt; nums[2] &lt;=&gt; 1 &lt; 2 。
删除下标 0 和 2 处的元素nums 变成 [1] 。
无法对数组再执行操作。
所以,可以得到的最小数组长度为 1 。
</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>9</sup></code></li>
<li><code>nums</code>&nbsp;<strong>非递减</strong>&nbsp;数组。</li>
</ul>

View File

@@ -0,0 +1,34 @@
<p>给你四个整数 <code>sx</code><code>sy</code><code>fx</code><code>fy</code>&nbsp; 以及一个 <strong>非负整数</strong> <code>t</code></p>
<p>在一个无限的二维网格中,你从单元格 <code>(sx, sy)</code> 开始出发。每一秒,你 <strong>必须</strong> 移动到任一与之前所处单元格相邻的单元格中。</p>
<p>如果你能在 <strong>恰好 </strong><code>t</code><strong></strong> 后到达单元格<em> </em><code>(fx, fy)</code> ,返回 <code>true</code> ;否则,返回&nbsp; <code>false</code></p>
<p>单元格的 <strong>相邻单元格</strong> 是指该单元格周围与其至少共享一个角的 8 个单元格。你可以多次访问同一个单元格。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2023/08/05/example2.svg" style="width: 443px; height: 243px;" />
<pre>
<strong>输入:</strong>sx = 2, sy = 4, fx = 7, fy = 7, t = 6
<strong>输出:</strong>true
<strong>解释:</strong>从单元格 (2, 4) 开始出发,穿过上图标注的单元格,可以在恰好 6 秒后到达单元格 (7, 7) 。
</pre>
<p><strong class="example">示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2023/08/05/example1.svg" style="width: 383px; height: 202px;" />
<pre>
<strong>输入:</strong>sx = 3, sy = 1, fx = 7, fy = 3, t = 3
<strong>输出:</strong>false
<strong>解释:</strong>从单元格 (3, 1) 开始出发,穿过上图标注的单元格,至少需要 4 秒后到达单元格 (7, 3) 。 因此,无法在 3 秒后到达单元格 (7, 3) 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= sx, sy, fx, fy &lt;= 10<sup>9</sup></code></li>
<li><code>0 &lt;= t &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,59 @@
<p>给你一个 <code>n</code>&nbsp;个点的 <strong>简单有向图</strong>&nbsp;(没有重复边的有向图),节点编号为 <code>0</code>&nbsp;<code>n - 1</code>&nbsp;。如果这些边是双向边,那么这个图形成一棵&nbsp;<strong></strong>&nbsp;</p>
<p>给你一个整数&nbsp;<code>n</code>&nbsp;和一个 <strong>二维</strong>&nbsp;整数数组&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;有一条&nbsp;<strong>有向边</strong>&nbsp;</p>
<p><strong>边反转</strong>&nbsp;指的是将一条边的方向反转,也就是说一条从节点&nbsp;<code>u<sub>i</sub></code>&nbsp;到节点&nbsp;<code>v<sub>i</sub></code>&nbsp;的边会变为一条从节点&nbsp;<code>v<sub>i</sub></code>&nbsp;到节点&nbsp;<code>u<sub>i</sub></code>&nbsp;的边。</p>
<p>对于范围&nbsp;<code>[0, n - 1]</code>&nbsp;中的每一个节点 <code>i</code>&nbsp;,你的任务是分别 <strong>独立</strong> 计算 <strong>最少</strong>&nbsp;需要多少次 <strong>边反转</strong>&nbsp;,从节点 <code>i</code>&nbsp;出发经过 <strong>一系列有向边</strong>&nbsp;,可以到达所有的节点。</p>
<p>请你返回一个长度为 <code>n</code>&nbsp;的整数数组<em>&nbsp;</em><code>answer</code><em>&nbsp;</em>,其中<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>
<p><img height="246" src="https://assets.leetcode.com/uploads/2023/08/26/image-20230826221104-3.png" width="312" /></p>
<pre>
<b>输入:</b>n = 4, edges = [[2,0],[2,1],[1,3]]
<b>输出:</b>[1,1,0,2]
<b>解释:</b>上图表示了与输入对应的简单有向图。
对于节点 0 :反转 [2,0] ,从节点 0 出发可以到达所有节点。
所以 answer[0] = 1 。
对于节点 1 :反转 [2,1] ,从节点 1 出发可以到达所有节点。
所以 answer[1] = 1 。
对于节点 2 :不需要反转就可以从节点 2 出发到达所有节点。
所以 answer[2] = 0 。
对于节点 3 :反转 [1,3] 和 [2,1] ,从节点 3 出发可以到达所有节点。
所以 answer[3] = 2 。
</pre>
<p><strong class="example">示例 2</strong></p>
<p><img height="217" src="https://assets.leetcode.com/uploads/2023/08/26/image-20230826225541-2.png" width="322" /></p>
<pre>
<b>输入:</b>n = 3, edges = [[1,2],[2,0]]
<b>输出:</b>[2,0,1]
<b>解释:</b>上图表示了与输入对应的简单有向图。
对于节点 0 :反转 [2,0] 和 [1,2] ,从节点 0 出发可以到达所有节点。
所以 answer[0] = 2 。
对于节点 1 :不需要反转就可以从节点 2 出发到达所有节点。
所以 answer[1] = 0 。
对于节点 2 :反转 [1,2] ,从节点 2 出发可以到达所有节点。
所以 answer[2] = 1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>edges.length == n - 1</code></li>
<li><code>edges[i].length == 2</code></li>
<li><code>0 &lt;= u<sub>i</sub> == edges[i][0] &lt; n</code></li>
<li><code>0 &lt;= v<sub>i</sub> == edges[i][1] &lt; n</code></li>
<li><code>u<sub>i</sub> != v<sub>i</sub></code></li>
<li>输入保证如果边是双向边,可以得到一棵树。</li>
</ul>

View File

@@ -0,0 +1,51 @@
<p>给你两个长度都为 <code>n</code>&nbsp;的字符串&nbsp;<code>s</code>&nbsp;<code>t</code>&nbsp;。你可以对字符串 <code>s</code>&nbsp;执行以下操作:</p>
<ul>
<li><code>s</code>&nbsp;长度为 <code>l</code>&nbsp;<code>0 &lt; l &lt; n</code>)的 <strong>后缀字符串</strong>&nbsp;删除,并将它添加在 <code>s</code>&nbsp;的开头。<br />
比方说,<code>s = 'abcd'</code>&nbsp;,那么一次操作中,你可以删除后缀&nbsp;<code>'cd'</code>&nbsp;,并将它添加到&nbsp;<code>s</code>&nbsp;的开头,得到&nbsp;<code>s = 'cdab'</code>&nbsp;</li>
</ul>
<p>给你一个整数&nbsp;<code>k</code>&nbsp;,请你返回&nbsp;<strong>恰好</strong> <code>k</code>&nbsp;次操作将<em>&nbsp;</em><code>s</code> 变为<em>&nbsp;</em><code>t</code>&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>
<pre>
<b>输入:</b>s = "abcd", t = "cdab", k = 2
<b>输出:</b>2
<b>解释:</b>
第一种方案:
第一次操作,选择 index = 3 开始的后缀,得到 s = "dabc" 。
第二次操作,选择 index = 3 开始的后缀,得到 s = "cdab" 。
第二种方案:
第一次操作,选择 index = 1 开始的后缀,得到 s = "bcda" 。
第二次操作,选择 index = 1 开始的后缀,得到 s = "cdab" 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>s = "ababab", t = "ababab", k = 1
<b>输出:</b>2
<b>解释:</b>
第一种方案:
选择 index = 2 开始的后缀,得到 s = "ababab" 。
第二种方案:
选择 index = 4 开始的后缀,得到 s = "ababab" 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= s.length &lt;= 5 * 10<sup>5</sup></code></li>
<li><code>1 &lt;= k &lt;= 10<sup>15</sup></code></li>
<li><code>s.length == t.length</code></li>
<li><code>s</code>&nbsp;<code>t</code>&nbsp;都只包含小写英文字母。</li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给你一个下标从 <strong>1</strong> 开始、由 <code>n</code> 个整数组成的数组。</p>
<p>如果一组数字中每对元素的乘积都是一个完全平方数,则称这组数字是一个 <strong>完全集</strong></p>
<p>下标集 <code>{1, 2, ..., n}</code> 的子集可以表示为 <code>{i<sub>1</sub>, i<sub>2</sub>, ..., i<sub>k</sub>}</code>,我们定义对应该子集的 <strong>元素和</strong><code>nums[i<sub>1</sub>] + nums[i<sub>2</sub>] + ... + nums[i<sub>k</sub>]</code></p>
<p>返回下标集&nbsp;<code>{1, 2, ..., n}</code><strong>完全子集</strong> 所能取到的 <strong>最大元素和</strong></p>
<p>完全平方数是指可以表示为一个整数和其自身相乘的数。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [8,7,3,5,7,2,4,9]
<strong>输出:</strong>16
<strong>解释:</strong>除了由单个下标组成的子集之外,还有两个下标集的完全子集:{1,4} 和 {2,8} 。
与下标 1 和 4 对应的元素和等于 nums[1] + nums[4] = 8 + 5 = 13 。
与下标 2 和 8 对应的元素和等于 nums[2] + nums[8] = 7 + 9 = 16 。
因此,下标集的完全子集可以取到的最大元素和为 16 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [5,10,3,10,1,13,7,9,4]
<strong>输出:</strong>19
<strong>解释:</strong>除了由单个下标组成的子集之外,还有四个下标集的完全子集:{1,4}、{1,9}、{2,8}、{4,9} 和 {1,4,9} 。
与下标 1 和 4 对应的元素和等于 nums[1] + nums[4] = 5 + 10 = 15 。
与下标 1 和 9 对应的元素和等于 nums[1] + nums[9] = 5 + 4 = 9 。
与下标 2 和 8 对应的元素和等于 nums[2] + nums[8] = 10 + 9 = 19 。
与下标 4 和 9 对应的元素和等于 nums[4] + nums[9] = 10 + 4 = 14 。
与下标 1、4 和 9 对应的元素和等于 nums[1] + nums[4] + nums[9] = 5 + 10 + 4 = 19 。
因此,下标集的完全子集可以取到的最大元素和为 19 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n == nums.length &lt;= 10<sup>4</sup></code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,48 @@
<p>给你一个大小为 <code>3 * 3</code>&nbsp;,下标从 <strong>0</strong>&nbsp;开始的二维整数矩阵&nbsp;<code>grid</code>&nbsp;,分别表示每一个格子里石头的数目。网格图中总共恰好有&nbsp;<code>9</code>&nbsp;个石头,一个格子里可能会有 <strong>多个</strong>&nbsp;石头。</p>
<p>每一次操作中,你可以将一个石头从它当前所在格子移动到一个至少有一条公共边的相邻格子。</p>
<p>请你返回每个格子恰好有一个石头的 <strong>最少移动次数</strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2023/08/23/example1-3.svg" style="width: 401px; height: 281px;" /></p>
<pre>
<b>输入:</b>grid = [[1,1,0],[1,1,1],[1,2,1]]
<b>输出:</b>3
<b>解释:</b>让每个格子都有一个石头的一个操作序列为:
1 - 将一个石头从格子 (2,1) 移动到 (2,2) 。
2 - 将一个石头从格子 (2,2) 移动到 (1,2) 。
3 - 将一个石头从格子 (1,2) 移动到 (0,2) 。
总共需要 3 次操作让每个格子都有一个石头。
让每个格子都有一个石头的最少操作次数为 3 。
</pre>
<p><strong class="example">示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2023/08/23/example2-2.svg" style="width: 401px; height: 281px;" /></p>
<pre>
<b>输入:</b>grid = [[1,3,0],[1,0,0],[1,0,3]]
<b>输出:</b>4
<b>解释:</b>让每个格子都有一个石头的一个操作序列为:
1 - 将一个石头从格子 (0,1) 移动到 (0,2) 。
2 - 将一个石头从格子 (0,1) 移动到 (1,1) 。
3 - 将一个石头从格子 (2,2) 移动到 (1,2) 。
4 - 将一个石头从格子 (2,2) 移动到 (2,1) 。
总共需要 4 次操作让每个格子都有一个石头。
让每个格子都有一个石头的最少操作次数为 4 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>grid.length == grid[i].length == 3</code></li>
<li><code>0 &lt;= grid[i][j] &lt;= 9</code></li>
<li><code>grid</code>&nbsp;中元素之和为&nbsp;<code>9</code></li>
</ul>

View File

@@ -0,0 +1,68 @@
<p>假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。现在共有 <code>n</code> 种不同类型的金属可以使用,并且你可以使用 <code>k</code> 台机器来制造合金。每台机器都需要特定数量的每种金属来创建合金。</p>
<p>对于第 <code>i</code> 台机器而言,创建合金需要 <code>composition[i][j]</code><code>j</code> 类型金属。最初,你拥有 <code>stock[i]</code><code>i</code> 类型金属,而每购入一份 <code>i</code> 类型金属需要花费 <code>cost[i]</code> 的金钱。</p>
<p>给你整数 <code>n</code><code>k</code><code>budget</code>,下标从 <strong>1</strong> 开始的二维数组 <code>composition</code>,两个下标从 <strong>1</strong> 开始的数组 <code>stock</code><code>cost</code>,请你在预算不超过 <code>budget</code> 金钱的前提下,<strong>最大化</strong> 公司制造合金的数量。</p>
<p><strong>所有合金都需要由同一台机器制造。</strong></p>
<p>返回公司可以制造的最大合金数。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>n = 3, k = 2, budget = 15, composition = [[1,1,1],[1,1,10]], stock = [0,0,0], cost = [1,2,3]
<strong>输出:</strong>2
<strong>解释:</strong>最优的方法是使用第 1 台机器来制造合金。
要想制造 2 份合金,我们需要购买:
- 2 份第 1 类金属。
- 2 份第 2 类金属。
- 2 份第 3 类金属。
总共需要 2 * 1 + 2 * 2 + 2 * 3 = 12 的金钱,小于等于预算 15 。
注意,我们最开始时候没有任何一类金属,所以必须买齐所有需要的金属。
可以证明在示例条件下最多可以制造 2 份合金。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>n = 3, k = 2, budget = 15, composition = [[1,1,1],[1,1,10]], stock = [0,0,100], cost = [1,2,3]
<strong>输出:</strong>5
<strong>解释:</strong>最优的方法是使用第 2 台机器来制造合金。
要想制造 5 份合金,我们需要购买:
- 5 份第 1 类金属。
- 5 份第 2 类金属。
- 0 份第 3 类金属。
总共需要 5 * 1 + 5 * 2 + 0 * 3 = 15 的金钱,小于等于预算 15 。
可以证明在示例条件下最多可以制造 5 份合金。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<strong>输入:</strong>n = 2, k = 3, budget = 10, composition = [[2,1],[1,2],[1,1]], stock = [1,1], cost = [5,5]
<strong>输出:</strong>2
<strong>解释:</strong>最优的方法是使用第 3 台机器来制造合金。
要想制造 2 份合金,我们需要购买:
- 1 份第 1 类金属。
- 1 份第 2 类金属。
总共需要 1 * 5 + 1 * 5 = 10 的金钱,小于等于预算 10 。
可以证明在示例条件下最多可以制造 2 份合金。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n, k &lt;= 100</code></li>
<li><code>0 &lt;= budget &lt;= 10<sup>8</sup></code></li>
<li><code>composition.length == k</code></li>
<li><code>composition[i].length == n</code></li>
<li><code>1 &lt;= composition[i][j] &lt;= 100</code></li>
<li><code>stock.length == cost.length == n</code></li>
<li><code>0 &lt;= stock[i] &lt;= 10<sup>8</sup></code></li>
<li><code>1 &lt;= cost[i] &lt;= 100</code></li>
</ul>

View File

@@ -0,0 +1,35 @@
<p>给你一个 <strong>二维</strong>&nbsp;整数数组&nbsp;<code>coordinates</code>&nbsp;和一个整数&nbsp;<code>k</code>&nbsp;,其中&nbsp;<code>coordinates[i] = [x<sub>i</sub>, y<sub>i</sub>]</code>&nbsp;是第 <code>i</code>&nbsp;个点在二维平面里的坐标。</p>
<p>我们定义两个点&nbsp;<code>(x<sub>1</sub>, y<sub>1</sub>)</code>&nbsp;&nbsp;<code>(x<sub>2</sub>, y<sub>2</sub>)</code>&nbsp;<strong>距离</strong>&nbsp;&nbsp;<code>(x1 XOR x2) + (y1 XOR y2)</code> <code>XOR</code>&nbsp;指的是按位异或运算。</p>
<p>请你返回满足<em>&nbsp;</em><code>i &lt; j</code><em>&nbsp;</em>且点<em>&nbsp;</em><code>i</code><em> </em>和点<em>&nbsp;</em><code>j</code>之间距离为<em>&nbsp;</em><code>k</code>&nbsp;的点对数目。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>coordinates = [[1,2],[4,2],[1,3],[5,2]], k = 5
<b>输出:</b>2
<b>解释:</b>以下点对距离为 k
- (0, 1)(1 XOR 4) + (2 XOR 2) = 5 。
- (2, 3)(1 XOR 5) + (3 XOR 2) = 5 。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>coordinates = [[1,3],[1,3],[1,3],[1,3],[1,3]], k = 0
<b>输出:</b>10
<b>解释:</b>任何两个点之间的距离都为 0 ,所以总共有 10 组点对。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= coordinates.length &lt;= 50000</code></li>
<li><code>0 &lt;= x<sub>i</sub>, y<sub>i</sub> &lt;= 10<sup>6</sup></code></li>
<li><code>0 &lt;= k &lt;= 100</code></li>
</ul>

View File

@@ -0,0 +1,47 @@
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> 和一个整数 <code>k</code></p>
<p>请你用整数形式返回 <code>nums</code> 中的特定元素之 <strong></strong> ,这些特定元素满足:其对应下标的二进制表示中恰存在 <code>k</code> 个置位。</p>
<p>整数的二进制表示中的 1 就是这个整数的 <strong>置位</strong></p>
<p>例如,<code>21</code> 的二进制表示为 <code>10101</code> ,其中有 <code>3</code> 个置位。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [5,10,1,5,2], k = 1
<strong>输出:</strong>13
<strong>解释:</strong>下标的二进制表示是:
0 = 000<sub>2</sub>
1 = 001<sub>2</sub>
2 = 010<sub>2</sub>
3 = 011<sub>2</sub>
4 = 100<sub>2
</sub>下标 1、2 和 4 在其二进制表示中都存在 k = 1 个置位。
因此,答案为 nums[1] + nums[2] + nums[4] = 13 。</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [4,3,2,1], k = 2
<strong>输出:</strong>1
<strong>解释:</strong>下标的二进制表示是:
0 = 00<sub>2</sub>
1 = 01<sub>2</sub>
2 = 10<sub>2</sub>
3 = 11<sub>2
</sub>只有下标 3 的二进制表示中存在 k = 2 个置位。
因此,答案为 nums[3] = 1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 1000</code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= k &lt;= 10</code></li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给你一个下标从 <strong>0</strong> 开始、长度为 <code>n</code> 的整数数组 <code>nums</code> ,其中 <code>n</code> 是班级中学生的总数。班主任希望能够在让所有学生保持开心的情况下选出一组学生:</p>
<p>如果能够满足下述两个条件之一,则认为第 <code>i</code> 位学生将会保持开心:</p>
<ul>
<li>这位学生被选中,并且被选中的学生人数 <strong>严格大于</strong> <code>nums[i]</code></li>
<li>这位学生没有被选中,并且被选中的学生人数 <strong>严格小于</strong> <code>nums[i]</code></li>
</ul>
<p>返回能够满足让所有学生保持开心的分组方法的数目。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [1,1]
<strong>输出:</strong>2
<strong>解释:</strong>
有两种可行的方法:
班主任没有选中学生。
班主任选中所有学生形成一组。
如果班主任仅选中一个学生来完成分组,那么两个学生都无法保持开心。因此,仅存在两种可行的方法。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [6,0,3,3,6,7,2,7]
<strong>输出:</strong>3
<strong>解释:</strong>
存在三种可行的方法:
班主任选中下标为 1 的学生形成一组。
班主任选中下标为 1、2、3、6 的学生形成一组。
班主任选中所有学生形成一组。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= nums[i] &lt; nums.length</code></li>
</ul>