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-02-11 23:56:20 +08:00
parent 9f463eb5f6
commit 947eefea5d
45 changed files with 17073 additions and 12601 deletions

View File

@@ -0,0 +1,38 @@
<p><strong>X轴</strong>&nbsp;上有一些奖品。给你一个整数数组&nbsp;<code>prizePositions</code>&nbsp;,它按照 <strong>非递减</strong>&nbsp;顺序排列,其中&nbsp;<code>prizePositions[i]</code>&nbsp;是第&nbsp;<code>i</code>&nbsp;件奖品的位置。数轴上一个位置可能会有多件奖品。再给你一个整数&nbsp;<code>k</code>&nbsp;</p>
<p>你可以选择两个端点为整数的线段。每个线段的长度都必须是 <code>k</code>&nbsp;。你可以获得位置在任一线段上的所有奖品(包括线段的两个端点)。注意,两个线段可能会有相交。</p>
<ul>
<li>比方说&nbsp;<code>k = 2</code>&nbsp;,你可以选择线段&nbsp;<code>[1, 3]</code>&nbsp;<code>[2, 4]</code>&nbsp;,你可以获得满足&nbsp;<code>1 &lt;= prizePositions[i] &lt;= 3</code> 或者&nbsp;<code>2 &lt;= prizePositions[i] &lt;= 4</code>&nbsp;的所有奖品 i 。</li>
</ul>
<p>请你返回在选择两个最优线段的前提下,可以获得的 <strong>最多</strong>&nbsp;奖品数目。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>prizePositions = [1,1,2,2,3,3,5], k = 2
<b>输出:</b>7
<b>解释:</b>这个例子中,你可以选择线段 [1, 3] 和 [3, 5] ,获得 7 个奖品。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>prizePositions = [1,2,3,4], k = 0
<b>输出:</b>2
<b>解释:</b>这个例子中,一个选择是选择线段 <code>[3, 3]</code><code>[4, 4] ,获得 2 个奖品。</code>
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= prizePositions.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= prizePositions[i] &lt;= 10<sup>9</sup></code></li>
<li><code>0 &lt;= k &lt;= 10<sup>9</sup> </code></li>
<li><code>prizePositions</code>&nbsp;有序非递减。</li>
</ul>

View File

@@ -0,0 +1,41 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的&nbsp;<code>m x n</code>&nbsp;<strong>二进制</strong> 矩阵&nbsp;<code>grid</code>&nbsp;。你可以从一个格子&nbsp;<code>(row, col)</code>&nbsp;移动到格子&nbsp;<code>(row + 1, col)</code>&nbsp;或者&nbsp;<code>(row, col + 1)</code>&nbsp;,前提是前往的格子值为 <code>1</code>&nbsp;。如果从&nbsp;<code>(0, 0)</code>&nbsp;&nbsp;<code>(m - 1, n - 1)</code>&nbsp;没有任何路径,我们称该矩阵是&nbsp;<strong>不连通</strong>&nbsp;的。</p>
<p>你可以翻转 <strong>最多一个</strong>&nbsp;格子的值(也可以不翻转)。你 <strong>不能翻转</strong>&nbsp;格子&nbsp;<code>(0, 0)</code>&nbsp;<code>(m - 1, n - 1)</code>&nbsp;</p>
<p>如果可以使矩阵不连通,请你返回&nbsp;<code>true</code>&nbsp;,否则返回<em>&nbsp;</em><code>false</code><em>&nbsp;</em></p>
<p><strong>注意</strong>&nbsp;,翻转一个格子的值,可以使它的值从&nbsp;<code>0</code>&nbsp;&nbsp;<code>1</code>&nbsp;,或从&nbsp;<code>1</code>&nbsp;&nbsp;<code>0</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/12/07/yetgrid2drawio.png" style="width: 441px; height: 151px;" /></p>
<pre>
<b>输入:</b>grid = [[1,1,1],[1,0,0],[1,1,1]]
<strong>输出:</strong>true
<b>解释:</b>按照上图所示我们翻转蓝色格子里的值,翻转后从 (0, 0) 到 (2, 2) 没有路径。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/12/07/yetgrid3drawio.png" /></p>
<pre>
<b>输入:</b>grid = [[1,1,1],[1,0,1],[1,1,1]]
<b>输出:</b>false
<b>解释:</b>无法翻转至多一个格子,使 (0, 0) 到 (2, 2) 没有路径。
</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;= m, n &lt;= 1000</code></li>
<li><code>1 &lt;= m * n &lt;= 10<sup>5</sup></code></li>
<li><code>grid[0][0] == grid[m - 1][n - 1] == 1</code></li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给你一个整数数组&nbsp;<code>banned</code>&nbsp;和两个整数&nbsp;<code>n</code>&nbsp;<code>maxSum</code>&nbsp;。你需要按照以下规则选择一些整数:</p>
<ul>
<li>被选择整数的范围是&nbsp;<code>[1, n]</code>&nbsp;</li>
<li>每个整数 <strong>至多</strong>&nbsp;选择 <strong>一次</strong>&nbsp;</li>
<li>被选择整数不能在数组&nbsp;<code>banned</code>&nbsp;中。</li>
<li>被选择整数的和不超过&nbsp;<code>maxSum</code>&nbsp;</li>
</ul>
<p>请你返回按照上述规则 <strong>最多</strong>&nbsp;可以选择的整数数目。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>banned = [1,6,5], n = 5, maxSum = 6
<b>输出:</b>2
<b>解释:</b>你可以选择整数 2 和 4 。
2 和 4 在范围 [1, 5] 内,且它们都不在 banned 中,它们的和是 6 ,没有超过 maxSum 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>banned = [1,2,3,4,5,6,7], n = 8, maxSum = 1
<b>输出:</b>0
<b>解释:</b>按照上述规则无法选择任何整数。
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>banned = [11], n = 7, maxSum = 50
<b>输出:</b>7
<b>解释:</b>你可以选择整数 1, 2, 3, 4, 5, 6 和 7 。
它们都在范围 [1, 7] 中,且都没出现在 banned 中,它们的和是 28 ,没有超过 maxSum 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= banned.length &lt;= 10<sup>4</sup></code></li>
<li><code>1 &lt;= banned[i], n &lt;= 10<sup>4</sup></code></li>
<li><code>1 &lt;= maxSum &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,46 @@
<p>给你一个整数数组 <code>gifts</code> ,表示各堆礼物的数量。每一秒,你需要执行以下操作:</p>
<ul>
<li>选择礼物数量最多的那一堆。</li>
<li>如果不止一堆都符合礼物数量最多,从中选择任一堆即可。</li>
<li>选中的那一堆留下平方根数量的礼物(向下取整),取走其他的礼物。</li>
</ul>
<p>返回在 <code>k</code> 秒后剩下的礼物数量<em></em></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>gifts = [25,64,9,4,100], k = 4
<strong>输出:</strong>29
<strong>解释:</strong>
按下述方式取走礼物:
- 在第一秒,选中最后一堆,剩下 10 个礼物。
- 接着第二秒选中第二堆礼物,剩下 8 个礼物。
- 然后选中第一堆礼物,剩下 5 个礼物。
- 最后,再次选中最后一堆礼物,剩下 3 个礼物。
最后剩下的礼物数量分别是 [5,8,9,4,3] ,所以,剩下礼物的总数量是 29 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>gifts = [1,1,1,1], k = 4
<strong>输出:</strong>4
<strong>解释:</strong>
在本例中,不管选中哪一堆礼物,都必须剩下 1 个礼物。
也就是说,你无法获取任一堆中的礼物。
所以,剩下礼物的总数量是 4 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= gifts.length &lt;= 10<sup>3</sup></code></li>
<li><code>1 &lt;= gifts[i] &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= k &lt;= 10<sup>3</sup></code></li>
</ul>

View File

@@ -0,0 +1,38 @@
<p>给你一个正整数数组&nbsp;<code>nums</code>&nbsp;,请你返回一个数组<em>&nbsp;</em><code>answer</code> ,你需要将&nbsp;<code>nums</code>&nbsp;中每个整数进行数位分割后,按照&nbsp;<code>nums</code>&nbsp;中出现的&nbsp;<strong>相同顺序</strong>&nbsp;放入答案数组中。</p>
<p>对一个整数进行数位分割,指的是将整数各个数位按原本出现的顺序排列成数组。</p>
<ul>
<li>比方说,整数&nbsp;<code>10921</code>&nbsp;,分割它的各个数位得到&nbsp;<code>[1,0,9,2,1]</code>&nbsp;</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>nums = [13,25,83,77]
<b>输出:</b>[1,3,2,5,8,3,7,7]
<b>解释:</b>
- 分割 13 得到 [1,3] 。
- 分割 25 得到 [2,5] 。
- 分割 83 得到 [8,3] 。
- 分割 77 得到 [7,7] 。
answer = [1,3,2,5,8,3,7,7] 。answer 中的数字分割结果按照原数字在数组中的相同顺序排列。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>nums = [7,1,3,9]
<b>输出:</b>[7,1,3,9]
<b>解释:</b>nums 中每个整数的分割是它自己。
answer = [7,1,3,9] 。
</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>
</ul>

View File

@@ -0,0 +1,44 @@
<p>沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。</p>
<p>由于相邻的房屋装有相互连通的防盗系统,所以小偷 <strong>不会窃取相邻的房屋</strong></p>
<p>小偷的 <strong>窃取能力</strong> 定义为他在窃取过程中能从单间房屋中窃取的 <strong>最大金额</strong></p>
<p>给你一个整数数组 <code>nums</code> 表示每间房屋存放的现金金额。形式上,从左起第 <code>i</code> 间房屋中放有 <code>nums[i]</code> 美元。</p>
<p>另给你一个整数&nbsp;<code>k</code> ,表示窃贼将会窃取的 <strong>最少</strong> 房屋数。小偷总能窃取至少 <code>k</code> 间房屋。</p>
<p>返回小偷的 <strong>最小</strong> 窃取能力。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [2,3,5,9], k = 2
<strong>输出:</strong>5
<strong>解释:</strong>
小偷窃取至少 2 间房屋,共有 3 种方式:
- 窃取下标 0 和 2 处的房屋,窃取能力为 max(nums[0], nums[2]) = 5 。
- 窃取下标 0 和 3 处的房屋,窃取能力为 max(nums[0], nums[3]) = 9 。
- 窃取下标 1 和 3 处的房屋,窃取能力为 max(nums[1], nums[3]) = 9 。
因此,返回 min(5, 9, 9) = 5 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [2,7,9,3,1], k = 2
<strong>输出:</strong>2
<strong>解释:</strong>共有 7 种窃取方式。窃取能力最小的情况所对应的方式是窃取下标 0 和 4 处的房屋。返回 max(nums[0], nums[4]) = 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;= nums[i] &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= k &lt;= (nums.length + 1)/2</code></li>
</ul>

View File

@@ -0,0 +1,41 @@
<p>给你一个下标从 <strong>0</strong> 开始的字符串数组 <code>words</code> 以及一个二维整数数组 <code>queries</code></p>
<p>每个查询 <code>queries[i] = [l<sub>i</sub>, r<sub>i</sub>]</code> 会要求我们统计在 <code>words</code> 中下标在 <code>l<sub>i</sub></code><code>r<sub>i</sub></code> 范围内(<strong>包含</strong> 这两个值)并且以元音开头和结尾的字符串的数目。</p>
<p>返回一个整数数组,其中数组的第 <code>i</code> 个元素对应第 <code>i</code> 个查询的答案。</p>
<p><strong>注意:</strong>元音字母是 <code>'a'</code><code>'e'</code><code>'i'</code><code>'o'</code><code>'u'</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>words = ["aba","bcb","ece","aa","e"], queries = [[0,2],[1,4],[1,1]]
<strong>输出:</strong>[2,3,0]
<strong>解释:</strong>以元音开头和结尾的字符串是 "aba"、"ece"、"aa" 和 "e" 。
查询 [0,2] 结果为 2字符串 "aba" 和 "ece")。
查询 [1,4] 结果为 3字符串 "ece"、"aa"、"e")。
查询 [1,1] 结果为 0 。
返回结果 [2,3,0] 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>words = ["a","e","i"], queries = [[0,2],[0,1],[2,2]]
<strong>输出:</strong>[3,2,1]
<strong>解释:</strong>每个字符串都满足这一条件,所以返回 [3,2,1] 。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= words.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= words[i].length &lt;= 40</code></li>
<li><code>words[i]</code> 仅由小写英文字母组成</li>
<li><code>sum(words[i].length) &lt;= 3 * 10<sup>5</sup></code></li>
<li><code>1 &lt;= queries.length &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= queries[j][0] &lt;= queries[j][1] &lt;&nbsp;words.length</code></li>
</ul>

View File

@@ -0,0 +1,40 @@
<p>你有两个果篮,每个果篮中有 <code>n</code> 个水果。给你两个下标从 <strong>0</strong> 开始的整数数组 <code>basket1</code><code>basket2</code> ,用以表示两个果篮中每个水果的成本。</p>
<p>你希望两个果篮相等。为此,可以根据需要多次执行下述操作:</p>
<ul>
<li>选中两个下标 <code>i</code><code>j</code> ,并交换 <code>basket1</code> 中的第 <code>i</code> 个水果和 <code>basket2</code> 中的第 <code>j</code> 个水果。</li>
<li>交换的成本是 <code>min(basket1<sub>i</sub>,basket2<sub>j</sub>)</code></li>
</ul>
<p>根据果篮中水果的成本进行排序,如果排序后结果完全相同,则认为两个果篮相等。</p>
<p>返回使两个果篮相等的最小交换成本,如果无法使两个果篮相等,则返回<em> </em><code>-1</code><em> </em></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>basket1 = [4,2,2,2], basket2 = [1,4,1,2]
<strong>输出:</strong>1
<strong>解释:</strong>交换 basket1 中下标为 1 的水果和 basket2 中下标为 0 的水果,交换的成本为 1 。此时basket1 = [4,1,2,2] 且 basket2 = [2,4,1,2] 。重排两个数组,发现二者相等。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>basket1 = [2,3,4,1], basket2 = [3,2,5,1]
<strong>输出:</strong>-1
<strong>解释:</strong>可以证明无法使两个果篮相等。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>basket1.length == bakste2.length</code></li>
<li><code>1 &lt;= basket1.length &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= basket1<sub>i</sub>,basket2<sub>i</sub> &lt;= 10<sup>9</sup></code></li>
</ul>