1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-09-03 22:42:52 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
This commit is contained in:
2022-08-29 22:05:38 +08:00
parent 85985929d8
commit 6f2245ab62
25 changed files with 13816 additions and 11602 deletions

View File

@@ -0,0 +1,48 @@
<p>给你一个包含若干星号 <code>*</code> 的字符串 <code>s</code></p>
<p>在一步操作中,你可以:</p>
<ul>
<li>选中 <code>s</code> 中的一个星号。</li>
<li>移除星号 <strong>左侧</strong> 最近的那个 <strong>非星号</strong> 字符,并移除该星号自身。</li>
</ul>
<p>返回移除 <strong>所有</strong> 星号之后的字符串<strong></strong></p>
<p><strong>注意:</strong></p>
<ul>
<li>生成的输入保证总是可以执行题面中描述的操作。</li>
<li>可以证明结果字符串是唯一的。</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>s = "leet**cod*e"
<strong>输出:</strong>"lecoe"
<strong>解释:</strong>从左到右执行移除操作:
- 距离第 1 个星号最近的字符是 "lee<em><strong>t</strong></em>**cod*e" 中的 't' s 变为 "lee*cod*e" 。
- 距离第 2 个星号最近的字符是 "le<em><strong>e</strong></em>*cod*e" 中的 'e' s 变为 "lecod*e" 。
- 距离第 3 个星号最近的字符是 "leco<em><strong>d</strong></em>*e" 中的 'd' s 变为 "lecoe" 。
不存在其他星号,返回 "lecoe" 。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>s = "erase*****"
<strong>输出:</strong>""
<strong>解释:</strong>整个字符串都会被移除,所以返回空字符串。
</pre>
<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>*</code> 组成</li>
<li><code>s</code> 可以执行上述操作</li>
</ul>

View File

@@ -0,0 +1,36 @@
<p>给你一个长度为 <code>n</code>&nbsp;的整数数组 <code>nums</code> ,和一个长度为 <code>m</code> 的整数数组 <code>queries</code></p>
<p>返回一个长度为 <code>m</code> 的数组<em> </em><code>answer</code><em> </em>,其中<em> </em><code>answer[i]</code><em> </em><code>nums</code><span style=""> </span>元素之和小于等于 <code>queries[i]</code><strong>子序列</strong><strong>最大</strong> 长度<span style="">&nbsp;</span><span style=""> </span></p>
<p><strong>子序列</strong> 是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [4,5,2,1], queries = [3,10,21]
<strong>输出:</strong>[2,3,4]
<strong>解释:</strong>queries 对应的 answer 如下:
- 子序列 [2,1] 的和小于或等于 3 。可以证明满足题目要求的子序列的最大长度是 2 ,所以 answer[0] = 2 。
- 子序列 [4,5,1] 的和小于或等于 10 。可以证明满足题目要求的子序列的最大长度是 3 ,所以 answer[1] = 3 。
- 子序列 [4,5,2,1] 的和小于或等于 21 。可以证明满足题目要求的子序列的最大长度是 4 ,所以 answer[2] = 4 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [2,3,4,5], queries = [1]
<strong>输出:</strong>[0]
<strong>解释:</strong>空子序列是唯一一个满足元素和小于或等于 1 的子序列,所以 answer[0] = 0 。</pre>
<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;= n, m &lt;= 1000</code></li>
<li><code>1 &lt;= nums[i], queries[i] &lt;= 10<sup>6</sup></code></li>
</ul>

View File

@@ -0,0 +1,57 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的字符串数组&nbsp;<code>garbage</code>&nbsp;,其中&nbsp;<code>garbage[i]</code>&nbsp;表示第 <code>i</code>&nbsp;个房子的垃圾集合。<code>garbage[i]</code>&nbsp;只包含字符&nbsp;<code>'M'</code>&nbsp;<code>'P'</code>&nbsp;<code>'G'</code>&nbsp;,但可能包含多个相同字符,每个字符分别表示一单位的金属、纸和玻璃。垃圾车收拾 <strong></strong>&nbsp;单位的任何一种垃圾都需要花费&nbsp;<code>1</code>&nbsp;分钟。</p>
<p>同时给你一个下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>travel</code>&nbsp;,其中&nbsp;<code>travel[i]</code>&nbsp;是垃圾车从房子 <code>i</code>&nbsp;行驶到房子 <code>i + 1</code>&nbsp;需要的分钟数。</p>
<p>城市里总共有三辆垃圾车,分别收拾三种垃圾。每辆垃圾车都从房子 <code>0</code>&nbsp;出发,<strong>按顺序</strong>&nbsp;到达每一栋房子。但它们 <strong>不是必须</strong>&nbsp;到达所有的房子。</p>
<p>任何时刻只有 <strong>一辆</strong>&nbsp;垃圾车处在使用状态。当一辆垃圾车在行驶或者收拾垃圾的时候,另外两辆车 <strong>不能</strong>&nbsp;做任何事情。</p>
<p>请你返回收拾完所有垃圾需要花费的 <strong>最少</strong>&nbsp;总分钟数。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>garbage = ["G","P","GP","GG"], travel = [2,4,3]
<b>输出:</b>21
<strong>解释:</strong>
收拾纸的垃圾车:
1. 从房子 0 行驶到房子 1
2. 收拾房子 1 的纸垃圾
3. 从房子 1 行驶到房子 2
4. 收拾房子 2 的纸垃圾
收拾纸的垃圾车总共花费 8 分钟收拾完所有的纸垃圾。
收拾玻璃的垃圾车:
1. 收拾房子 0 的玻璃垃圾
2. 从房子 0 行驶到房子 1
3. 从房子 1 行驶到房子 2
4. 收拾房子 2 的玻璃垃圾
5. 从房子 2 行驶到房子 3
6. 收拾房子 3 的玻璃垃圾
收拾玻璃的垃圾车总共花费 13 分钟收拾完所有的玻璃垃圾。
由于没有金属垃圾,收拾金属的垃圾车不需要花费任何时间。
所以总共花费 8 + 13 = 21 分钟收拾完所有垃圾。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>garbage = ["MMM","PGM","GP"], travel = [3,10]
<b>输出:</b>37
<strong>解释:</strong>
收拾金属的垃圾车花费 7 分钟收拾完所有的金属垃圾。
收拾纸的垃圾车花费 15 分钟收拾完所有的纸垃圾。
收拾玻璃的垃圾车花费 15 分钟收拾完所有的玻璃垃圾。
总共花费 7 + 15 + 15 = 37 分钟收拾完所有的垃圾。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= garbage.length &lt;= 10<sup>5</sup></code></li>
<li><code>garbage[i]</code> 只包含字母&nbsp;<code>'M'</code>&nbsp;<code>'P'</code>&nbsp;&nbsp;<code>'G'</code>&nbsp;</li>
<li><code>1 &lt;= garbage[i].length &lt;= 10</code></li>
<li><code>travel.length == garbage.length - 1</code></li>
<li><code>1 &lt;= travel[i] &lt;= 100</code></li>
</ul>

View File

@@ -0,0 +1,58 @@
<p>给你一个 <strong></strong>&nbsp;整数&nbsp;<code>k</code>&nbsp;,同时给你:</p>
<ul>
<li>一个大小为 <code>n</code>&nbsp;的二维整数数组&nbsp;<code>rowConditions</code>&nbsp;,其中&nbsp;<code>rowConditions[i] = [above<sub>i</sub>, below<sub>i</sub>]</code>&nbsp;</li>
<li>一个大小为 <code>m</code>&nbsp;的二维整数数组&nbsp;<code>colConditions</code>&nbsp;,其中&nbsp;<code>colConditions[i] = [left<sub>i</sub>, right<sub>i</sub>]</code>&nbsp;</li>
</ul>
<p>两个数组里的整数都是&nbsp;<code>1</code>&nbsp;&nbsp;<code>k</code>&nbsp;之间的数字。</p>
<p>你需要构造一个&nbsp;<code>k x k</code>&nbsp;的矩阵,<code>1</code>&nbsp;&nbsp;<code>k</code>&nbsp;每个数字需要&nbsp;<strong>恰好出现一次</strong>&nbsp;。剩余的数字都是<b>&nbsp;</b><code>0</code>&nbsp;</p>
<p>矩阵还需要满足以下条件:</p>
<ul>
<li>对于所有 <code>0</code>&nbsp;&nbsp;<code>n - 1</code>&nbsp;之间的下标&nbsp;<code>i</code>&nbsp;,数字&nbsp;<code>above<sub>i</sub></code>&nbsp;所在的 <strong></strong>&nbsp;必须在数字&nbsp;<code>below<sub>i</sub></code>&nbsp;所在行的上面。</li>
<li>对于所有 <code>0</code>&nbsp;<code>m - 1</code>&nbsp;之间的下标&nbsp;<code>i</code>&nbsp;,数字&nbsp;<code>left<sub>i</sub></code>&nbsp;所在的 <b></b>&nbsp;必须在数字&nbsp;<code>right<sub>i</sub></code>&nbsp;所在列的左边。</li>
</ul>
<p>返回满足上述要求的 <strong>任意</strong>&nbsp;矩阵。如果不存在答案,返回一个空的矩阵。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/07/06/gridosdrawio.png" style="width: 211px; height: 211px;"></p>
<pre><b>输入:</b>k = 3, rowConditions = [[1,2],[3,2]], colConditions = [[2,1],[3,2]]
<b>输出:</b>[[3,0,0],[0,0,1],[0,2,0]]
<b>解释:</b>上图为一个符合所有条件的矩阵。
行要求如下:
- 数字 1 在第 <strong>1</strong> 行,数字 2 在第 <strong>2</strong>&nbsp;1 在 2 的上面。
- 数字 3 在第 <strong>0</strong>&nbsp;行,数字 2 在第 <strong>2</strong>&nbsp;3 在 2 的上面。
列要求如下:
- 数字 2 在第 <strong>1</strong>&nbsp;列,数字 1 在第 <strong>2</strong>&nbsp;2 在 1 的左边。
- 数字 3 在第 <strong>0</strong>&nbsp;列,数字 2 在第 <strong>1</strong>&nbsp;3 在 2 的左边。
注意,可能有多种正确的答案。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>k = 3, rowConditions = [[1,2],[2,3],[3,1],[2,3]], colConditions = [[2,1]]
<b>输出:</b>[]
<b>解释:</b>由前两个条件可以得到 3 在 1 的下面,但第三个条件是 3 在 1 的上面。
没有符合条件的矩阵存在,所以我们返回空矩阵。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= k &lt;= 400</code></li>
<li><code>1 &lt;= rowConditions.length, colConditions.length &lt;= 10<sup>4</sup></code></li>
<li><code>rowConditions[i].length == colConditions[i].length == 2</code></li>
<li><code>1 &lt;= above<sub>i</sub>, below<sub>i</sub>, left<sub>i</sub>, right<sub>i</sub> &lt;= k</code></li>
<li><code>above<sub>i</sub> != below<sub>i</sub></code></li>
<li><code>left<sub>i</sub> != right<sub>i</sub></code></li>
</ul>