1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-09-05 07:21:40 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
This commit is contained in:
2023-07-16 12:28:13 +08:00
parent 25bf8d9df8
commit 4baa9b5a57
75 changed files with 20712 additions and 13577 deletions

View File

@@ -0,0 +1,39 @@
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> 和一个正整数 <code>k</code></p>
<p>你可以对数组执行下述操作 <strong>任意次</strong> </p>
<ul>
<li>从数组中选出长度为 <code>k</code><strong>任一</strong> 子数组,并将子数组中每个元素都 <strong>减去</strong> <code>1</code></li>
</ul>
<p>如果你可以使数组中的所有元素都等于 <code>0</code> ,返回&nbsp; <code>true</code><em> </em>;否则,返回<em> </em><code>false</code><em> </em></p>
<p><strong>子数组</strong> 是数组中的一个非空连续元素序列。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>nums = [2,2,3,1,1,0], k = 3
<strong>输出:</strong>true
<strong>解释:</strong>可以执行下述操作:
- 选出子数组 [2,2,3] ,执行操作后,数组变为 nums = [<em><strong>1</strong></em>,<em><strong>1</strong></em>,<em><strong>2</strong></em>,1,1,0] 。
- 选出子数组 [2,1,1] ,执行操作后,数组变为 nums = [1,1,<em><strong>1</strong></em>,<em><strong>0</strong></em>,<em><strong>0</strong></em>,0] 。
- 选出子数组 [1,1,1] ,执行操作后,数组变为 nums = [<em><strong>0</strong></em>,<em><strong>0</strong></em>,<em><strong>0</strong></em>,0,0,0] 。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>nums = [1,3,1,1], k = 2
<strong>输出:</strong>false
<strong>解释:</strong>无法使数组中的所有元素等于 0 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= k &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= nums[i] &lt;= 10<sup>6</sup></code></li>
</ul>

View File

@@ -0,0 +1,53 @@
<p>如果元素 <code>x</code>&nbsp;在长度为 <code>m</code>&nbsp;的整数数组 <code>arr</code>&nbsp;中满足 <code>freq(x) * 2 &gt; m</code>&nbsp;,那么我们称 <code>x</code>&nbsp;<strong>支配元素</strong>&nbsp;。其中&nbsp;<code>freq(x)</code>&nbsp;<code>x</code>&nbsp;在数组 <code>arr</code>&nbsp;中出现的次数。注意,根据这个定义,数组 <code>arr</code>&nbsp;<strong>最多</strong>&nbsp;只会有 <strong>一个</strong>&nbsp;支配元素。</p>
<p>给你一个下标从 <strong>0</strong>&nbsp;开始长度为 <code>n</code>&nbsp;的整数数组&nbsp;<code>nums</code>&nbsp;,数据保证它含有一个支配元素。</p>
<p>你需要在下标 <code>i</code>&nbsp;处将&nbsp;<code>nums</code>&nbsp;分割成两个数组&nbsp;<code>nums[0, ..., i]</code>&nbsp;<code>nums[i + 1, ..., n - 1]</code>&nbsp;,如果一个分割满足以下条件,我们称它是&nbsp;<strong>合法</strong>&nbsp;的:</p>
<ul>
<li><code>0 &lt;= i &lt; n - 1</code></li>
<li><code>nums[0, ..., i]</code>&nbsp;&nbsp;<code>nums[i + 1, ..., n - 1]</code>&nbsp;的支配元素相同。</li>
</ul>
<p>这里,&nbsp;<code>nums[i, ..., j]</code>&nbsp;表示 <code>nums</code>&nbsp;的一个子数组,它开始于下标&nbsp;<code>i</code>&nbsp;,结束于下标&nbsp;<code>j</code>&nbsp;,两个端点都包含在子数组内。特别地,如果&nbsp;<code>j &lt; i</code>&nbsp;,那么&nbsp;<code>nums[i, ..., j]</code>&nbsp;表示一个空数组。</p>
<p>请你返回一个 <strong>合法分割</strong>&nbsp;<strong>最小</strong>&nbsp;下标。如果合法分割不存在,返回 <code>-1</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>nums = [1,2,2,2]
<b>输出:</b>2
<b>解释:</b>我们将数组在下标 2 处分割,得到 [1,2,2] 和 [2] 。
数组 [1,2,2] 中,元素 2 是支配元素,因为它在数组中出现了 2 次,且 2 * 2 &gt; 3 。
数组 [2] 中,元素 2 是支配元素,因为它在数组中出现了 1 次,且 1 * 2 &gt; 1 。
两个数组 [1,2,2] 和 [2] 都有与 nums 一样的支配元素,所以这是一个合法分割。
下标 2 是合法分割中的最小下标。</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>nums = [2,1,3,1,1,1,7,1,2,1]
<b>输出:</b>4
<b>解释:</b>我们将数组在下标 4 处分割,得到 [2,1,3,1,1] 和 [1,7,1,2,1] 。
数组 [2,1,3,1,1] 中,元素 1 是支配元素,因为它在数组中出现了 3 次,且 3 * 2 &gt; 5 。
数组 [1,7,1,2,1] 中,元素 1 是支配元素,因为它在数组中出现了 3 次,且 3 * 2 &gt; 5 。
两个数组 [2,1,3,1,1] 和 [1,7,1,2,1] 都有与 nums 一样的支配元素,所以这是一个合法分割。
下标 4 是所有合法分割中的最小下标。</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>nums = [3,3,3,3,7,2,2]
<b>输出:</b>-1
<b>解释:</b>没有合法分割。
</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;有且只有一个支配元素。</li>
</ul>

View File

@@ -0,0 +1,49 @@
<p>给你一个二进制字符串&nbsp;<code>s</code>&nbsp;,你需要将字符串分割成一个或者多个&nbsp;<strong>子字符串</strong>&nbsp;&nbsp;,使每个子字符串都是 <strong>美丽</strong>&nbsp;的。</p>
<p>如果一个字符串满足以下条件,我们称它是 <strong>美丽</strong>&nbsp;的:</p>
<ul>
<li>它不包含前导 0 。</li>
<li>它是 <code>5</code>&nbsp;的幂的 <strong>二进制</strong>&nbsp;表示。</li>
</ul>
<p>请你返回分割后的子字符串的 <strong>最少</strong>&nbsp;数目。如果无法将字符串&nbsp;<code>s</code>&nbsp;分割成美丽子字符串,请你返回 <code>-1</code>&nbsp;</p>
<p>子字符串是一个字符串中一段连续的字符序列。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>s = "1011"
<b>输出:</b>2
<b>解释:</b>我们可以将输入字符串分成 ["101", "1"] 。
- 字符串 "101" 不包含前导 0 ,且它是整数 5<sup>1</sup> = 5 的二进制表示。
- 字符串 "1" 不包含前导 0 ,且它是整数 5<sup>0</sup> = 1 的二进制表示。
最少可以将 s 分成 2 个美丽子字符串。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>s = "111"
<b>输出:</b>3
<b>解释:</b>我们可以将输入字符串分成 ["1", "1", "1"] 。
- 字符串 "1" 不包含前导 0 ,且它是整数 5<sup>0</sup> = 1 的二进制表示。
最少可以将 s 分成 3 个美丽子字符串。
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>s = "0"
<b>输出:</b>-1
<b>解释:</b>无法将给定字符串分成任何美丽子字符串。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 15</code></li>
<li><code>s[i]</code>&nbsp;要么是&nbsp;<code>'0'</code>&nbsp;要么是&nbsp;<code>'1'</code></li>
</ul>

View File

@@ -0,0 +1,38 @@
<p>给你两个整数 <code>num</code><code>t</code></p>
<p>如果整数 <code>x</code> 可以在执行下述操作不超过 <code>t</code> 次的情况下变为与 <code>num</code> 相等,则称其为 <strong>可达成数字</strong> </p>
<ul>
<li>每次操作将 <code>x</code> 的值增加或减少 <code>1</code> ,同时可以选择将 <code>num</code> 的值增加或减少 <code>1</code></li>
</ul>
<p>返回所有可达成数字中的最大值。可以证明至少存在一个可达成数字。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>num = 4, t = 1
<strong>输出:</strong>6
<strong>解释:</strong>最大可达成数字是 x = 6 ,执行下述操作可以使其等于 num
- x 减少 1 ,同时 num 增加 1 。此时x = 5 且 num = 5 。
可以证明不存在大于 6 的可达成数字。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>num = 3, t = 2
<strong>输出:</strong>7
<strong>解释:</strong>最大的可达成数字是 x = 7 ,执行下述操作可以使其等于 num
- x 减少 1 ,同时 num 增加 1 。此时x = 6 且 num = 4 。
- x 减少 1 ,同时 num 增加 1 。此时x = 5 且 num = 5 。
可以证明不存在大于 7 的可达成数字。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= num, t&nbsp;&lt;= 50</code></li>
</ul>

View File

@@ -0,0 +1,48 @@
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> 和一个 <strong>非负</strong> 整数 <code>k</code></p>
<p>在一步操作中,你可以执行下述指令:</p>
<ul>
<li>在范围&nbsp;<code>[0, nums.length - 1]</code> 中选择一个 <strong>此前没有选过</strong> 的下标 <code>i</code></li>
<li><code>nums[i]</code> 替换为范围 <code>[nums[i] - k, nums[i] + k]</code> 内的任一整数。</li>
</ul>
<p>数组的 <strong>美丽值</strong> 定义为数组中由相等元素组成的最长子序列的长度。</p>
<p>对数组 <code>nums</code> 执行上述操作任意次后,返回数组可能取得的 <strong>最大</strong> 美丽值。</p>
<p><strong>注意:</strong><strong></strong> 能对每个下标执行 <strong>一次</strong> 此操作。</p>
<p>数组的 <strong>子序列</strong> 定义是:经由原数组删除一些元素(也可能不删除)得到的一个新数组,且在此过程中剩余元素的顺序不发生改变。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [4,6,1,2], k = 2
<strong>输出:</strong>3
<strong>解释:</strong>在这个示例中,我们执行下述操作:
- 选择下标 1 ,将其替换为 4从范围 [4,8] 中选出),此时 nums = [4,4,1,2] 。
- 选择下标 3 ,将其替换为 4从范围 [0,4] 中选出),此时 nums = [4,4,1,4] 。
执行上述操作后,数组的美丽值是 3子序列由下标 0 、1 、3 对应的元素组成)。
可以证明 3 是我们可以得到的由相等元素组成的最长子序列长度。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [1,1,1,1], k = 10
<strong>输出:</strong>4
<strong>解释:</strong>在这个示例中,我们无需执行任何操作。
数组 nums 的美丽值是 4整个数组
</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], k &lt;= 10<sup>5</sup></code></li>
</ul>

View File

@@ -0,0 +1,38 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>nums</code>&nbsp;。如果 <code>nums</code>&nbsp;中长度为&nbsp;<code>m</code>&nbsp;的子数组&nbsp;<code>s</code>&nbsp;满足以下条件,我们称它是一个 <strong>交替子序列</strong> </p>
<ul>
<li><code>m</code>&nbsp;大于&nbsp;<code>1</code>&nbsp;</li>
<li><code>s<sub>1</sub> = s<sub>0</sub> + 1</code>&nbsp;</li>
<li>下标从 <strong>0</strong> 开始的子数组&nbsp;<code>s</code>&nbsp;与数组&nbsp;<code>[s<sub>0</sub>, s<sub>1</sub>, s<sub>0</sub>, s<sub>1</sub>,...,s<sub>(m-1) % 2</sub>]</code>&nbsp;一样。也就是说,<code>s<sub>1</sub> - s<sub>0</sub> = 1</code>&nbsp;<code>s<sub>2</sub> - s<sub>1</sub> = -1</code>&nbsp;<code>s<sub>3</sub> - s<sub>2</sub> = 1</code>&nbsp;<code>s<sub>4</sub> - s<sub>3</sub> = -1</code>&nbsp;,以此类推,直到&nbsp;<code>s[m - 1] - s[m - 2] = (-1)<sup>m</sup></code>&nbsp;</li>
</ul>
<p>请你返回 <code>nums</code>&nbsp;中所有 <strong>交替</strong>&nbsp;子数组中,最长的长度,如果不存在交替子数组,请你返回 <code>-1</code>&nbsp;</p>
<p>子数组是一个数组中一段连续 <strong>非空</strong>&nbsp;的元素序列。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>nums = [2,3,4,3,4]
<b>输出:</b>4
<b>解释:</b>交替子数组有 [3,4] [3,4,3] 和 [3,4,3,4] 。最长的子数组为 [3,4,3,4] 长度为4 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>nums = [4,5,6]
<b>输出:</b>2
<strong>解释:</strong>[4,5] 和 [5,6] 是仅有的两个交替子数组。它们长度都为 2 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= nums.length &lt;= 100</code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>4</sup></code></li>
</ul>

View File

@@ -0,0 +1,36 @@
<p>给你一个字符串&nbsp;<code>word</code>&nbsp;和一个字符串数组&nbsp;<code>forbidden</code>&nbsp;</p>
<p>如果一个字符串不包含&nbsp;<code>forbidden</code>&nbsp;中的任何字符串,我们称这个字符串是&nbsp;<strong>合法</strong>&nbsp;的。</p>
<p>请你返回字符串 <code>word</code>&nbsp;的一个 <strong>最长合法子字符串</strong>&nbsp;的长度。</p>
<p><strong>子字符串</strong> 指的是一个字符串中一段连续的字符,它可以为空。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>word = "cbaaaabc", forbidden = ["aaa","cb"]
<b>输出:</b>4
<b>解释:</b>总共有 9 个合法子字符串:"c" "b" "a" "ba" "aa" "bc" "baa" "aab" 和 "aabc" 。最长合法子字符串的长度为 4 。
其他子字符串都要么包含 "aaa" ,要么包含 "cb" 。</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>word = "leetcode", forbidden = ["de","le","e"]
<strong>输出:</strong>4
<b>解释:</b>总共有 11 个合法子字符串:"l" "t" "c" "o" "d" "tc" "co" "od" "tco" "cod" 和 "tcod" 。最长合法子字符串的长度为 4 。
所有其他子字符串都至少包含 "de" "le" 和 "e" 之一。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= word.length &lt;= 10<sup>5</sup></code></li>
<li><code>word</code>&nbsp;只包含小写英文字母。</li>
<li><code>1 &lt;= forbidden.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= forbidden[i].length &lt;= 10</code></li>
<li><code>forbidden[i]</code>&nbsp;只包含小写英文字母。</li>
</ul>

View File

@@ -0,0 +1,47 @@
<p>给你两个下标从 <strong>0</strong> 开始的整数数组 <code>nums1</code><code>nums2</code> ,长度均为 <code>n</code></p>
<p>让我们定义另一个下标从 <strong>0</strong> 开始、长度为 <code>n</code> 的整数数组,<code>nums3</code> 。对于范围&nbsp;<code>[0, n - 1]</code> 的每个下标 <code>i</code> ,你可以将 <code>nums1[i]</code><code>nums2[i]</code> 的值赋给 <code>nums3[i]</code></p>
<p>你的任务是使用最优策略为 <code>nums3</code> 赋值,以最大化 <code>nums3</code><strong>最长非递减子数组</strong> 的长度。</p>
<p>以整数形式表示并返回 <code>nums3</code><strong>最长非递减</strong> 子数组的长度。</p>
<p><strong>注意:子数组</strong> 是数组中的一个连续非空元素序列。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>nums1 = [2,3,1], nums2 = [1,2,1]
<strong>输出:</strong>2
<strong>解释:</strong>构造 nums3 的方法之一是:
nums3 = [nums1[0], nums2[1], nums2[2]] =&gt; [2,2,1]
从下标 0 开始到下标 1 结束,形成了一个长度为 2 的非递减子数组 [2,2] 。
可以证明 2 是可达到的最大长度。</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>nums1 = [1,3,2,1], nums2 = [2,2,3,4]
<strong>输出:</strong>4
<strong>解释:</strong>构造 nums3 的方法之一是:
nums3 = [nums1[0], nums2[1], nums2[2], nums2[3]] =&gt; [1,2,3,4]
整个数组形成了一个长度为 4 的非递减子数组,并且是可达到的最大长度。
</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>nums1 = [1,1], nums2 = [2,2]
<strong>输出:</strong>2
<strong>解释:</strong>构造 nums3 的方法之一是:
nums3 = [nums1[0], nums1[1]] =&gt; [1,1]
整个数组形成了一个长度为 2 的非递减子数组,并且是可达到的最大长度。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums1.length == nums2.length == n &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums1[i], nums2[i] &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,31 @@
<p>给你一个下标从 <strong>1</strong> 开始、长度为 <code>n</code> 的整数数组 <code>nums</code></p>
<p><code>nums</code> 中的元素 <code>nums[i]</code> 而言,如果 <code>n</code> 能够被 <code>i</code> 整除,即 <code>n % i == 0</code> ,则认为 <code>num[i]</code> 是一个 <strong>特殊元素</strong></p>
<p>返回 <code>nums</code> 中所有 <strong>特殊元素</strong><strong>平方和</strong></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>nums = [1,2,3,4]
<strong>输出:</strong>21
<strong>解释:</strong>nums 中共有 3 个特殊元素nums[1] ,因为 4 被 1 整除nums[2] ,因为 4 被 2 整除;以及 nums[4] ,因为 4 被 4 整除。
因此nums 中所有元素的平方和等于 nums[1] * nums[1] + nums[2] * nums[2] + nums[4] * nums[4] = 1 * 1 + 2 * 2 + 4 * 4 = 21 。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>nums = [2,7,1,19,18,3]
<strong>输出:</strong>63
<strong>解释:</strong>nums 中共有 4 个特殊元素nums[1] ,因为 6 被 1 整除nums[2] ,因为 6 被 2 整除nums[3] ,因为 6 被 3 整除;以及 nums[6] ,因为 6 被 6 整除。
因此nums 中所有元素的平方和等于 nums[1] * nums[1] + nums[2] * nums[2] + nums[3] * nums[3] + nums[6] * nums[6] = 2 * 2 + 7 * 7 + 1 * 1 + 3 * 3 = 63 。 </pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length == n &lt;= 50</code></li>
<li><code>1 &lt;= nums[i] &lt;= 50</code></li>
</ul>

View File

@@ -0,0 +1,53 @@
<p>给你一个下标从 <strong>0</strong> 开始、由 <code>n</code> 个整数组成的数组 <code>nums</code> 和一个整数 <code>target</code></p>
<p>你的初始位置在下标 <code>0</code> 。在一步操作中,你可以从下标 <code>i</code> 跳跃到任意满足下述条件的下标 <code>j</code> </p>
<ul>
<li><code>0 &lt;= i &lt; j &lt; n</code></li>
<li><code>-target &lt;= nums[j] - nums[i] &lt;= target</code></li>
</ul>
<p>返回到达下标 <code>n - 1</code> 处所需的 <strong>最大跳跃次数</strong></p>
<p>如果无法到达下标 <code>n - 1</code> ,返回 <code>-1</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>nums = [1,3,6,4,1,2], target = 2
<strong>输出:</strong>3
<strong>解释:</strong>要想以最大跳跃次数从下标 0 到下标 n - 1 ,可以按下述跳跃序列执行操作:
- 从下标 0 跳跃到下标 1 。
- 从下标 1 跳跃到下标 3 。
- 从下标 3 跳跃到下标 5 。
可以证明,从 0 到 n - 1 的所有方案中,不存在比 3 步更长的跳跃序列。因此,答案是 3 。 </pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>nums = [1,3,6,4,1,2], target = 3
<strong>输出:</strong>5
<strong>解释:</strong>要想以最大跳跃次数从下标 0 到下标 n - 1 ,可以按下述跳跃序列执行操作:
- 从下标 0 跳跃到下标 1 。
- 从下标 1 跳跃到下标 2 。
- 从下标 2 跳跃到下标 3 。
- 从下标 3 跳跃到下标 4 。
- 从下标 4 跳跃到下标 5 。
可以证明,从 0 到 n - 1 的所有方案中,不存在比 5 步更长的跳跃序列。因此,答案是 5 。 </pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>nums = [1,3,6,4,1,2], target = 0
<strong>输出:</strong>-1
<strong>解释:</strong>可以证明不存在从 0 到 n - 1 的跳跃序列。因此,答案是 -1 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= nums.length == n &lt;= 1000</code></li>
<li><code>-10<sup>9</sup>&nbsp;&lt;= nums[i]&nbsp;&lt;= 10<sup>9</sup></code></li>
<li><code>0 &lt;= target &lt;= 2 * 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,48 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>nums</code>&nbsp;,表示一些石块的初始位置。再给你两个长度<strong>&nbsp;相等</strong>&nbsp;下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>moveFrom</code>&nbsp;<code>moveTo</code>&nbsp;</p>
<p>&nbsp;<code>moveFrom.length</code>&nbsp;次操作内,你可以改变石块的位置。在第&nbsp;<code>i</code>&nbsp;次操作中,你将位置在&nbsp;<code>moveFrom[i]</code>&nbsp;的所有石块移到位置&nbsp;<code>moveTo[i]</code>&nbsp;</p>
<p>完成这些操作后,请你按升序返回所有 <strong></strong>&nbsp;石块的位置。</p>
<p><strong>注意:</strong></p>
<ul>
<li>如果一个位置至少有一个石块,我们称这个位置 <strong></strong>&nbsp;石块。</li>
<li>一个位置可能会有多个石块。</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>nums = [1,6,7,8], moveFrom = [1,7,2], moveTo = [2,9,5]
<b>输出:</b>[5,6,8,9]
<b>解释:</b>一开始,石块在位置 1,6,7,8 。
第 i = 0 步操作中,我们将位置 1 处的石块移到位置 2 处,位置 2,6,7,8 有石块。
第 i = 1 步操作中,我们将位置 7 处的石块移到位置 9 处,位置 2,6,8,9 有石块。
第 i = 2 步操作中,我们将位置 2 处的石块移到位置 5 处,位置 5,6,8,9 有石块。
最后,至少有一个石块的位置为 [5,6,8,9] 。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [1,1,3,3], moveFrom = [1,3], moveTo = [2,2]
<b>输出:</b>[2]
<b>解释:</b>一开始,石块在位置 [1,1,3,3] 。
第 i = 0 步操作中,我们将位置 1 处的石块移到位置 2 处,有石块的位置为 [2,2,3,3] 。
第 i = 1 步操作中,我们将位置 3 处的石块移到位置 2 处,有石块的位置为 [2,2,2,2] 。
由于 2 是唯一有石块的位置,我们返回 [2] 。
</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;= moveFrom.length &lt;= 10<sup>5</sup></code></li>
<li><code>moveFrom.length == moveTo.length</code></li>
<li><code>1 &lt;= nums[i], moveFrom[i], moveTo[i] &lt;= 10<sup>9</sup></code></li>
<li>测试数据保证在进行第&nbsp;<code>i</code>&nbsp;步操作时,<code>moveFrom[i]</code>&nbsp;处至少有一个石块。</li>
</ul>

View File

@@ -0,0 +1,47 @@
<p>给你两个整数&nbsp;<code>m</code>&nbsp;<code>n</code>&nbsp;,表示一个下标从 <strong>0</strong>&nbsp;开始的&nbsp;<code>m x n</code>&nbsp;的网格图。</p>
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的二维整数矩阵&nbsp;<code>coordinates</code>&nbsp;,其中&nbsp;<code>coordinates[i] = [x, y]</code>&nbsp;表示坐标为&nbsp;<code>[x, y]</code>&nbsp;的格子是 <strong>黑色的</strong>&nbsp;,所有没出现在&nbsp;<code>coordinates</code>&nbsp;中的格子都是 <strong>白色的</strong></p>
<p>一个块定义为网格图中&nbsp;<code>2 x 2</code>&nbsp;的一个子矩阵。更正式的,对于左上角格子为 <code>[x, y]</code> 的块,其中 <code>0 &lt;= x &lt; m - 1</code>&nbsp;<code>0 &lt;= y &lt; n - 1</code> ,包含坐标为&nbsp;<code>[x, y]</code>&nbsp;<code>[x + 1, y]</code>&nbsp;<code>[x, y + 1]</code>&nbsp;&nbsp;<code>[x + 1, y + 1]</code>&nbsp;的格子。</p>
<p>请你返回一个下标从 <strong>0</strong>&nbsp;开始长度为 <code>5</code>&nbsp;的整数数组&nbsp;<code>arr</code>&nbsp;<code>arr[i]</code>&nbsp;表示恰好包含&nbsp;<code>i</code>&nbsp;&nbsp;<strong>黑色</strong>&nbsp;格子的块的数目。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>m = 3, n = 3, coordinates = [[0,0]]
<b>输出:</b>[3,1,0,0,0]
<b>解释:</b>网格图如下:
<img alt="" src="https://assets.leetcode.com/uploads/2023/06/18/screen-shot-2023-06-18-at-44656-am.png" style="width: 150px; height: 128px;" />
只有 1 个块有一个黑色格子,这个块是左上角为 [0,0] 的块。
其他 3 个左上角分别为 [0,1] [1,0] 和 [1,1] 的块都有 0 个黑格子。
所以我们返回 [3,1,0,0,0] 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>m = 3, n = 3, coordinates = [[0,0],[1,1],[0,2]]
<b>输出:</b>[0,2,2,0,0]
<b>解释:</b>网格图如下:
<img alt="" src="https://assets.leetcode.com/uploads/2023/06/18/screen-shot-2023-06-18-at-45018-am.png" style="width: 150px; height: 128px;" />
有 2 个块有 2 个黑色格子(左上角格子分别为 [0,0] 和 [0,1])。
左上角为 [1,0] 和 [1,1] 的两个块,都有 1 个黑格子。
所以我们返回 [0,2,2,0,0] 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= m &lt;= 10<sup>5</sup></code></li>
<li><code>2 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= coordinates.length &lt;= 10<sup>4</sup></code></li>
<li><code>coordinates[i].length == 2</code></li>
<li><code>0 &lt;= coordinates[i][0] &lt; m</code></li>
<li><code>0 &lt;= coordinates[i][1] &lt; n</code></li>
<li><code>coordinates</code>&nbsp;中的坐标对两两互不相同。</li>
</ul>