mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-09-03 22:42:52 +08:00
update
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
<p>给你一个整数数组 <code>nums</code> 和一个整数 <code>threshold</code> 。</p>
|
||||
|
||||
<p>找到长度为 <code>k</code> 的 <code>nums</code> 子数组,满足数组中 <strong>每个</strong> 元素都 <strong>大于</strong> <code>threshold / k</code> 。</p>
|
||||
|
||||
<p>请你返回满足要求的 <strong>任意</strong> 子数组的 <strong>大小</strong> 。如果没有这样的子数组,返回 <code>-1</code> 。</p>
|
||||
|
||||
<p><strong>子数组</strong> 是数组中一段连续非空的元素序列。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>nums = [1,3,4,3,1], threshold = 6
|
||||
<b>输出:</b>3
|
||||
<b>解释:</b>子数组 [3,4,3] 大小为 3 ,每个元素都大于 6 / 3 = 2 。
|
||||
注意这是唯一合法的子数组。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>nums = [6,5,6,5,8], threshold = 7
|
||||
<b>输出:</b>1
|
||||
<b>解释:</b>子数组 [8] 大小为 1 ,且 8 > 7 / 1 = 7 。所以返回 1 。
|
||||
注意子数组 [6,5] 大小为 2 ,每个元素都大于 7 / 2 = 3.5 。
|
||||
类似的,子数组 [6,5,6] ,[6,5,6,5] ,[6,5,6,5,8] 都是符合条件的子数组。
|
||||
所以返回 2, 3, 4 和 5 都可以。</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= nums.length <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= nums[i], threshold <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,43 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始长度为 <code>n</code> 的整数数组 <code>buses</code> ,其中 <code>buses[i]</code> 表示第 <code>i</code> 辆公交车的出发时间。同时给你一个下标从 <strong>0</strong> 开始长度为 <code>m</code> 的整数数组 <code>passengers</code> ,其中 <code>passengers[j]</code> 表示第 <code>j</code> 位乘客的到达时间。所有公交车出发的时间互不相同,所有乘客到达的时间也互不相同。</p>
|
||||
|
||||
<p>给你一个整数 <code>capacity</code> ,表示每辆公交车 <strong>最多</strong> 能容纳的乘客数目。</p>
|
||||
|
||||
<p>每位乘客都会搭乘下一辆有座位的公交车。如果你在 <code>y</code> 时刻到达,公交在 <code>x</code> 时刻出发,满足 <code>y <= x</code> 且公交没有满,那么你可以搭乘这一辆公交。<strong>最早</strong> 到达的乘客优先上车。</p>
|
||||
|
||||
<p>返回你可以搭乘公交车的最晚到达公交站时间。你 <strong>不能</strong> 跟别的乘客同时刻到达。</p>
|
||||
|
||||
<p><strong>注意:</strong>数组 <code>buses</code> 和 <code>passengers</code> 不一定是有序的。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>buses = [10,20], passengers = [2,17,18,19], capacity = 2
|
||||
<b>输出:</b>16
|
||||
<strong>解释:</strong>
|
||||
第 1 辆公交车载着第 1 位乘客。
|
||||
第 2 辆公交车载着你和第 2 位乘客。
|
||||
注意你不能跟其他乘客同一时间到达,所以你必须在第二位乘客之前到达。</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>buses = [20,30,10], passengers = [19,13,26,4,25,11,21], capacity = 2
|
||||
<b>输出:</b>20
|
||||
<b>解释:</b>
|
||||
第 1 辆公交车载着第 4 位乘客。
|
||||
第 2 辆公交车载着第 6 位和第 2 位乘客。
|
||||
第 3 辆公交车载着第 1 位乘客和你。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>n == buses.length</code></li>
|
||||
<li><code>m == passengers.length</code></li>
|
||||
<li><code>1 <= n, m, capacity <= 10<sup>5</sup></code></li>
|
||||
<li><code>2 <= buses[i], passengers[i] <= 10<sup>9</sup></code></li>
|
||||
<li><code>buses</code> 中的元素 <strong>互不相同 </strong>。</li>
|
||||
<li><code>passengers</code> 中的元素 <strong>互不相同</strong> 。</li>
|
||||
</ul>
|
34
leetcode-cn/problem (Chinese)/数组拆分 [array-partition].html
Normal file
34
leetcode-cn/problem (Chinese)/数组拆分 [array-partition].html
Normal file
@@ -0,0 +1,34 @@
|
||||
<p>给定长度为 <code>2n</code><strong> </strong>的整数数组 <code>nums</code> ,你的任务是将这些数分成 <code>n</code><strong> </strong>对, 例如 <code>(a<sub>1</sub>, b<sub>1</sub>), (a<sub>2</sub>, b<sub>2</sub>), ..., (a<sub>n</sub>, b<sub>n</sub>)</code> ,使得从 <code>1</code> 到 <code>n</code> 的 <code>min(a<sub>i</sub>, b<sub>i</sub>)</code> 总和最大。</p>
|
||||
|
||||
<p>返回该 <strong>最大总和</strong> 。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>nums = [1,4,3,2]
|
||||
<strong>输出:</strong>4
|
||||
<strong>解释:</strong>所有可能的分法(忽略元素顺序)为:
|
||||
1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
|
||||
2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
|
||||
3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4
|
||||
所以最大总和为 4</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>nums = [6,2,6,5,1,2]
|
||||
<strong>输出:</strong>9
|
||||
<strong>解释:</strong>最优的分法为 (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= n <= 10<sup>4</sup></code></li>
|
||||
<li><code>nums.length == 2 * n</code></li>
|
||||
<li><code>-10<sup>4</sup> <= nums[i] <= 10<sup>4</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,40 @@
|
||||
<p>现有一个包含所有正整数的集合 <code>[1, 2, 3, 4, 5, ...]</code> 。</p>
|
||||
|
||||
<p>实现 <code>SmallestInfiniteSet</code> 类:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>SmallestInfiniteSet()</code> 初始化 <strong>SmallestInfiniteSet</strong> 对象以包含 <strong>所有</strong> 正整数。</li>
|
||||
<li><code>int popSmallest()</code> <strong>移除</strong> 并返回该无限集中的最小整数。</li>
|
||||
<li><code>void addBack(int num)</code> 如果正整数 <code>num</code> <strong>不</strong> 存在于无限集中,则将一个 <code>num</code> <strong>添加</strong> 到该无限集中。</li>
|
||||
</ul>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例:</strong></p>
|
||||
|
||||
<pre><strong>输入</strong>
|
||||
["SmallestInfiniteSet", "addBack", "popSmallest", "popSmallest", "popSmallest", "addBack", "popSmallest", "popSmallest", "popSmallest"]
|
||||
[[], [2], [], [], [], [1], [], [], []]
|
||||
<strong>输出</strong>
|
||||
[null, null, 1, 2, 3, null, 1, 4, 5]
|
||||
|
||||
<strong>解释</strong>
|
||||
SmallestInfiniteSet smallestInfiniteSet = new SmallestInfiniteSet();
|
||||
smallestInfiniteSet.addBack(2); // 2 已经在集合中,所以不做任何变更。
|
||||
smallestInfiniteSet.popSmallest(); // 返回 1 ,因为 1 是最小的整数,并将其从集合中移除。
|
||||
smallestInfiniteSet.popSmallest(); // 返回 2 ,并将其从集合中移除。
|
||||
smallestInfiniteSet.popSmallest(); // 返回 3 ,并将其从集合中移除。
|
||||
smallestInfiniteSet.addBack(1); // 将 1 添加到该集合中。
|
||||
smallestInfiniteSet.popSmallest(); // 返回 1 ,因为 1 在上一步中被添加到集合中,
|
||||
// 且 1 是最小的整数,并将其从集合中移除。
|
||||
smallestInfiniteSet.popSmallest(); // 返回 4 ,并将其从集合中移除。
|
||||
smallestInfiniteSet.popSmallest(); // 返回 5 ,并将其从集合中移除。</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= num <= 1000</code></li>
|
||||
<li>最多调用 <code>popSmallest</code> 和 <code>addBack</code> 方法 <strong>共计</strong> <code>1000</code> 次</li>
|
||||
</ul>
|
@@ -0,0 +1,41 @@
|
||||
<p>给你两个下标从 <strong>0</strong> 开始的整数数组 <code>nums1</code> 和 <code>nums2</code> ,长度为 <code>n</code> 。</p>
|
||||
|
||||
<p>数组 <code>nums1</code> 和 <code>nums2</code> 的 <strong>差值平方和</strong> 定义为所有满足 <code>0 <= i < n</code> 的 <code>(nums1[i] - nums2[i])<sup>2</sup></code> 之和。</p>
|
||||
|
||||
<p>同时给你两个正整数 <code>k1</code> 和 <code>k2</code> 。你可以将 <code>nums1</code> 中的任意元素 <code>+1</code> 或者 <code>-1</code> 至多 <code>k1</code> 次。类似的,你可以将 <code>nums2</code> 中的任意元素 <code>+1</code> 或者 <code>-1</code> 至多 <code>k2</code> 次。</p>
|
||||
|
||||
<p>请你返回修改数组<em> </em><code>nums1</code><em> </em>至多<em> </em><code>k1</code> 次且修改数组<em> </em><code>nums2</code> 至多 <code>k2</code><em> </em>次后的最小 <strong>差值平方和</strong> 。</p>
|
||||
|
||||
<p><strong>注意:</strong>你可以将数组中的元素变成 <strong>负</strong> 整数。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>nums1 = [1,2,3,4], nums2 = [2,10,20,19], k1 = 0, k2 = 0
|
||||
<b>输出:</b>579
|
||||
<b>解释:</b>nums1 和 nums2 中的元素不能修改,因为 k1 = 0 和 k2 = 0 。
|
||||
差值平方和为:(1 - 2)<sup>2 </sup>+ (2 - 10)<sup>2 </sup>+ (3 - 20)<sup>2 </sup>+ (4 - 19)<sup>2</sup> = 579 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>nums1 = [1,4,10,12], nums2 = [5,8,6,9], k1 = 1, k2 = 1
|
||||
<b>输出:</b>43
|
||||
<b>解释:</b>一种得到最小差值平方和的方式为:
|
||||
- 将 nums1[0] 增加一次。
|
||||
- 将 nums2[2] 增加一次。
|
||||
最小差值平方和为:
|
||||
(2 - 5)<sup>2 </sup>+ (4 - 8)<sup>2 </sup>+ (10 - 7)<sup>2 </sup>+ (12 - 9)<sup>2</sup> = 43 。
|
||||
注意,也有其他方式可以得到最小差值平方和,但没有得到比 43 更小答案的方案。</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>n == nums1.length == nums2.length</code></li>
|
||||
<li><code>1 <= n <= 10<sup>5</sup></code></li>
|
||||
<li><code>0 <= nums1[i], nums2[i] <= 10<sup>5</sup></code></li>
|
||||
<li><code>0 <= k1, k2 <= 10<sup>9</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,40 @@
|
||||
<p>在第 <code>1</code> 天,有一个人发现了一个秘密。</p>
|
||||
|
||||
<p>给你一个整数 <code>delay</code> ,表示每个人会在发现秘密后的 <code>delay</code> 天之后,<strong>每天</strong> 给一个新的人 <strong>分享</strong> 秘密。同时给你一个整数 <code>forget</code> ,表示每个人在发现秘密 <code>forget</code> 天之后会 <strong>忘记</strong> 这个秘密。一个人 <strong>不能</strong> 在忘记秘密那一天及之后的日子里分享秘密。</p>
|
||||
|
||||
<p>给你一个整数 <code>n</code> ,请你返回在第 <code>n</code> 天结束时,知道秘密的人数。由于答案可能会很大,请你将结果对 <code>10<sup>9</sup> + 7</code> <strong>取余</strong> 后返回。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>n = 6, delay = 2, forget = 4
|
||||
<b>输出:</b>5
|
||||
<strong>解释:</strong>
|
||||
第 1 天:假设第一个人叫 A 。(一个人知道秘密)
|
||||
第 2 天:A 是唯一一个知道秘密的人。(一个人知道秘密)
|
||||
第 3 天:A 把秘密分享给 B 。(两个人知道秘密)
|
||||
第 4 天:A 把秘密分享给一个新的人 C 。(三个人知道秘密)
|
||||
第 5 天:A 忘记了秘密,B 把秘密分享给一个新的人 D 。(三个人知道秘密)
|
||||
第 6 天:B 把秘密分享给 E,C 把秘密分享给 F 。(五个人知道秘密)
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>n = 4, delay = 1, forget = 3
|
||||
<b>输出:</b>6
|
||||
<strong>解释:</strong>
|
||||
第 1 天:第一个知道秘密的人为 A 。(一个人知道秘密)
|
||||
第 2 天:A 把秘密分享给 B 。(两个人知道秘密)
|
||||
第 3 天:A 和 B 把秘密分享给 2 个新的人 C 和 D 。(四个人知道秘密)
|
||||
第 4 天:A 忘记了秘密,B、C、D 分别分享给 3 个新的人。(六个人知道秘密)
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>2 <= n <= 1000</code></li>
|
||||
<li><code>1 <= delay < forget <= n</code></li>
|
||||
</ul>
|
@@ -0,0 +1,45 @@
|
||||
<p>给你两个字符串 <code>start</code> 和 <code>target</code> ,长度均为 <code>n</code> 。每个字符串 <strong>仅</strong> 由字符 <code>'L'</code>、<code>'R'</code> 和 <code>'_'</code> 组成,其中:</p>
|
||||
|
||||
<ul>
|
||||
<li>字符 <code>'L'</code> 和 <code>'R'</code> 表示片段,其中片段 <code>'L'</code> 只有在其左侧直接存在一个 <strong>空位</strong> 时才能向 <strong>左</strong> 移动,而片段 <code>'R'</code> 只有在其右侧直接存在一个 <strong>空位</strong> 时才能向 <strong>右</strong> 移动。</li>
|
||||
<li>字符 <code>'_'</code> 表示可以被 <strong>任意</strong> <code>'L'</code> 或 <code>'R'</code> 片段占据的空位。</li>
|
||||
</ul>
|
||||
|
||||
<p>如果在移动字符串 <code>start</code> 中的片段任意次之后可以得到字符串 <code>target</code> ,返回 <code>true</code> ;否则,返回 <code>false</code> 。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>start = "_L__R__R_", target = "L______RR"
|
||||
<strong>输出:</strong>true
|
||||
<strong>解释:</strong>可以从字符串 start 获得 target ,需要进行下面的移动:
|
||||
- 将第一个片段向左移动一步,字符串现在变为 "<strong>L</strong>___R__R_" 。
|
||||
- 将最后一个片段向右移动一步,字符串现在变为 "L___R___<strong>R</strong>" 。
|
||||
- 将第二个片段向右移动散步,字符串现在变为 "L______<strong>R</strong>R" 。
|
||||
可以从字符串 start 得到 target ,所以返回 true 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>start = "R_L_", target = "__LR"
|
||||
<strong>输出:</strong>false
|
||||
<strong>解释:</strong>字符串 start 中的 'R' 片段可以向右移动一步得到 "_<strong>R</strong>L_" 。
|
||||
但是,在这一步之后,不存在可以移动的片段,所以无法从字符串 start 得到 target 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 3:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>start = "_R", target = "R_"
|
||||
<strong>输出:</strong>false
|
||||
<strong>解释:</strong>字符串 start 中的片段只能向右移动,所以无法从字符串 start 得到 target 。</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>n == start.length == target.length</code></li>
|
||||
<li><code>1 <= n <= 10<sup>5</sup></code></li>
|
||||
<li><code>start</code> 和 <code>target</code> 由字符 <code>'L'</code>、<code>'R'</code> 和 <code>'_'</code> 组成</li>
|
||||
</ul>
|
@@ -0,0 +1,48 @@
|
||||
<p>给你两个整数 <code>n</code> 和 <code>maxValue</code> ,用于描述一个 <strong>理想数组</strong> 。</p>
|
||||
|
||||
<p>对于下标从 <strong>0</strong> 开始、长度为 <code>n</code> 的整数数组 <code>arr</code> ,如果满足以下条件,则认为该数组是一个 <strong>理想数组</strong> :</p>
|
||||
|
||||
<ul>
|
||||
<li>每个 <code>arr[i]</code> 都是从 <code>1</code> 到 <code>maxValue</code> 范围内的一个值,其中 <code>0 <= i < n</code> 。</li>
|
||||
<li>每个 <code>arr[i]</code> 都可以被 <code>arr[i - 1]</code> 整除,其中 <code>0 < i < n</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回长度为 <code>n</code> 的 <strong>不同</strong> 理想数组的数目。由于答案可能很大,返回对 <code>10<sup>9</sup> + 7</code> 取余的结果。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>n = 2, maxValue = 5
|
||||
<strong>输出:</strong>10
|
||||
<strong>解释:</strong>存在以下理想数组:
|
||||
- 以 1 开头的数组(5 个):[1,1]、[1,2]、[1,3]、[1,4]、[1,5]
|
||||
- 以 2 开头的数组(2 个):[2,2]、[2,4]
|
||||
- 以 3 开头的数组(1 个):[3,3]
|
||||
- 以 4 开头的数组(1 个):[4,4]
|
||||
- 以 5 开头的数组(1 个):[5,5]
|
||||
共计 5 + 2 + 1 + 1 + 1 = 10 个不同理想数组。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>n = 5, maxValue = 3
|
||||
<strong>输出:</strong>11
|
||||
<strong>解释:</strong>存在以下理想数组:
|
||||
- 以 1 开头的数组(9 个):
|
||||
- 不含其他不同值(1 个):[1,1,1,1,1]
|
||||
- 含一个不同值 2(4 个):[1,1,1,1,2], [1,1,1,2,2], [1,1,2,2,2], [1,2,2,2,2]
|
||||
- 含一个不同值 3(4 个):[1,1,1,1,3], [1,1,1,3,3], [1,1,3,3,3], [1,3,3,3,3]
|
||||
- 以 2 开头的数组(1 个):[2,2,2,2,2]
|
||||
- 以 3 开头的数组(1 个):[3,3,3,3,3]
|
||||
共计 9 + 1 + 1 = 11 个不同理想数组。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>2 <= n <= 10<sup>4</sup></code></li>
|
||||
<li><code>1 <= maxValue <= 10<sup>4</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,42 @@
|
||||
<p>给你一个 <code>m x n</code> 的整数网格图 <code>grid</code> ,你可以从一个格子移动到 <code>4</code> 个方向相邻的任意一个格子。</p>
|
||||
|
||||
<p>请你返回在网格图中从 <strong>任意</strong> 格子出发,达到 <strong>任意</strong> 格子,且路径中的数字是 <strong>严格递增</strong> 的路径数目。由于答案可能会很大,请将结果对 <code>10<sup>9</sup> + 7</code> <strong>取余</strong> 后返回。</p>
|
||||
|
||||
<p>如果两条路径中访问过的格子不是完全相同的,那么它们视为两条不同的路径。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/05/10/griddrawio-4.png" style="width: 181px; height: 121px;"></p>
|
||||
|
||||
<pre><b>输入:</b>grid = [[1,1],[3,4]]
|
||||
<b>输出:</b>8
|
||||
<b>解释:</b>严格递增路径包括:
|
||||
- 长度为 1 的路径:[1],[1],[3],[4] 。
|
||||
- 长度为 2 的路径:[1 -> 3],[1 -> 4],[3 -> 4] 。
|
||||
- 长度为 3 的路径:[1 -> 3 -> 4] 。
|
||||
路径数目为 4 + 3 + 1 = 8 。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>grid = [[1],[2]]
|
||||
<b>输出:</b>3
|
||||
<b>解释:</b>严格递增路径包括:
|
||||
- 长度为 1 的路径:[1],[2] 。
|
||||
- 长度为 2 的路径:[1 -> 2] 。
|
||||
路径数目为 2 + 1 = 3 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>m == grid.length</code></li>
|
||||
<li><code>n == grid[i].length</code></li>
|
||||
<li><code>1 <= m, n <= 1000</code></li>
|
||||
<li><code>1 <= m * n <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= grid[i][j] <= 10<sup>5</sup></code></li>
|
||||
</ul>
|
@@ -0,0 +1,35 @@
|
||||
<p>给你两个整数:<code>m</code> 和 <code>n</code> ,表示矩阵的维数。</p>
|
||||
|
||||
<p>另给你一个整数链表的头节点 <code>head</code> 。</p>
|
||||
|
||||
<p>请你生成一个大小为 <code>m x n</code> 的螺旋矩阵,矩阵包含链表中的所有整数。链表中的整数从矩阵 <strong>左上角</strong> 开始、<strong>顺时针 </strong>按 <strong>螺旋</strong> 顺序填充。如果还存在剩余的空格,则用 <code>-1</code> 填充。</p>
|
||||
|
||||
<p>返回生成的矩阵。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
<img alt="" src="https://assets.leetcode.com/uploads/2022/05/09/ex1new.jpg" style="width: 240px; height: 150px;">
|
||||
<pre><strong>输入:</strong>m = 3, n = 5, head = [3,0,2,6,8,1,7,9,4,2,5,5,0]
|
||||
<strong>输出:</strong>[[3,0,2,6,8],[5,0,-1,-1,1],[5,2,4,9,7]]
|
||||
<strong>解释:</strong>上图展示了链表中的整数在矩阵中是如何排布的。
|
||||
注意,矩阵中剩下的空格用 -1 填充。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
<img alt="" src="https://assets.leetcode.com/uploads/2022/05/11/ex2.jpg" style="width: 221px; height: 60px;">
|
||||
<pre><strong>输入:</strong>m = 1, n = 4, head = [0,1,2]
|
||||
<strong>输出:</strong>[[0,1,2,-1]]
|
||||
<strong>解释:</strong>上图展示了链表中的整数在矩阵中是如何从左到右排布的。
|
||||
注意,矩阵中剩下的空格用 -1 填充。</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= m, n <= 10<sup>5</sup></code></li>
|
||||
<li><code>1 <= m * n <= 10<sup>5</sup></code></li>
|
||||
<li>链表中节点数目在范围 <code>[1, m * n]</code> 内</li>
|
||||
<li><code>0 <= Node.val <= 1000</code></li>
|
||||
</ul>
|
@@ -0,0 +1,47 @@
|
||||
<p>现有一台饮水机,可以制备冷水、温水和热水。每秒钟,可以装满 <code>2</code> 杯 <strong>不同</strong> 类型的水或者 <code>1</code> 杯任意类型的水。</p>
|
||||
|
||||
<p>给你一个下标从 <strong>0</strong> 开始、长度为 <code>3</code> 的整数数组 <code>amount</code> ,其中 <code>amount[0]</code>、<code>amount[1]</code> 和 <code>amount[2]</code> 分别表示需要装满冷水、温水和热水的杯子数量。返回装满所有杯子所需的 <strong>最少</strong> 秒数。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>amount = [1,4,2]
|
||||
<strong>输出:</strong>4
|
||||
<strong>解释:</strong>下面给出一种方案:
|
||||
第 1 秒:装满一杯冷水和一杯温水。
|
||||
第 2 秒:装满一杯温水和一杯热水。
|
||||
第 3 秒:装满一杯温水和一杯热水。
|
||||
第 4 秒:装满一杯温水。
|
||||
可以证明最少需要 4 秒才能装满所有杯子。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>amount = [5,4,4]
|
||||
<strong>输出:</strong>7
|
||||
<strong>解释:</strong>下面给出一种方案:
|
||||
第 1 秒:装满一杯冷水和一杯热水。
|
||||
第 2 秒:装满一杯冷水和一杯温水。
|
||||
第 3 秒:装满一杯冷水和一杯温水。
|
||||
第 4 秒:装满一杯温水和一杯热水。
|
||||
第 5 秒:装满一杯冷水和一杯热水。
|
||||
第 6 秒:装满一杯冷水和一杯温水。
|
||||
第 7 秒:装满一杯热水。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 3:</strong></p>
|
||||
|
||||
<pre><strong>输入:</strong>amount = [5,0,0]
|
||||
<strong>输出:</strong>5
|
||||
<strong>解释:</strong>每秒装满一杯冷水。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>amount.length == 3</code></li>
|
||||
<li><code>0 <= amount[i] <= 100</code></li>
|
||||
</ul>
|
50
leetcode-cn/problem (Chinese)/解密消息 [decode-the-message].html
Normal file
50
leetcode-cn/problem (Chinese)/解密消息 [decode-the-message].html
Normal file
@@ -0,0 +1,50 @@
|
||||
<p>给你字符串 <code>key</code> 和 <code>message</code> ,分别表示一个加密密钥和一段加密消息。解密 <code>message</code> 的步骤如下:</p>
|
||||
|
||||
<ol>
|
||||
<li>使用 <code>key</code> 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 <strong>顺序</strong> 。</li>
|
||||
<li>将替换表与普通英文字母表对齐,形成对照表。</li>
|
||||
<li>按照对照表 <strong>替换</strong> <code>message</code> 中的每个字母。</li>
|
||||
<li>空格 <code>' '</code> 保持不变。</li>
|
||||
</ol>
|
||||
|
||||
<ul>
|
||||
<li>例如,<code>key = "<em><strong>hap</strong></em>p<em><strong>y</strong></em> <em><strong>bo</strong></em>y"</code>(实际的加密密钥会包含字母表中每个字母 <strong>至少一次</strong>),据此,可以得到部分对照表(<code>'h' -> 'a'</code>、<code>'a' -> 'b'</code>、<code>'p' -> 'c'</code>、<code>'y' -> 'd'</code>、<code>'b' -> 'e'</code>、<code>'o' -> 'f'</code>)。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回解密后的消息。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/05/08/ex1new4.jpg" style="width: 752px; height: 150px;" /></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>key = "the quick brown fox jumps over the lazy dog", message = "vkbs bs t suepuv"
|
||||
<strong>输出:</strong>"this is a secret"
|
||||
<strong>解释:</strong>对照表如上图所示。
|
||||
提取 "<em><strong>the</strong></em> <em><strong>quick</strong></em> <em><strong>brown</strong></em> <em><strong>f</strong></em>o<em><strong>x</strong></em> <em><strong>j</strong></em>u<em><strong>mps</strong></em> o<em><strong>v</strong></em>er the <em><strong>lazy</strong></em> <em><strong>d</strong></em>o<em><strong>g</strong></em>" 中每个字母的首次出现可以得到替换表。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/05/08/ex2new.jpg" style="width: 754px; height: 150px;" /></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>key = "eljuxhpwnyrdgtqkviszcfmabo", message = "zwx hnfx lqantp mnoeius ycgk vcnjrdb"
|
||||
<strong>输出:</strong>"the five boxing wizards jump quickly"
|
||||
<strong>解释:</strong>对照表如上图所示。
|
||||
提取 "<em><strong>eljuxhpwnyrdgtqkviszcfmabo</strong></em>" 中每个字母的首次出现可以得到替换表。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>26 <= key.length <= 2000</code></li>
|
||||
<li><code>key</code> 由小写英文字母及 <code>' '</code> 组成</li>
|
||||
<li><code>key</code> 包含英文字母表中每个字符(<code>'a'</code> 到 <code>'z'</code>)<strong>至少一次</strong></li>
|
||||
<li><code>1 <= message.length <= 2000</code></li>
|
||||
<li><code>message</code> 由小写英文字母和 <code>' '</code> 组成</li>
|
||||
</ul>
|
@@ -0,0 +1,51 @@
|
||||
<p>给你一棵 <strong>完整二叉树</strong> 的根,这棵树有以下特征:</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>叶子节点</strong> 要么值为 <code>0</code> 要么值为 <code>1</code> ,其中 <code>0</code> 表示 <code>False</code> ,<code>1</code> 表示 <code>True</code> 。</li>
|
||||
<li><strong>非叶子节点 </strong>要么值为 <code>2</code> 要么值为 <code>3</code> ,其中 <code>2</code> 表示逻辑或 <code>OR</code> ,<code>3</code> 表示逻辑与 <code>AND</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>计算</strong> 一个节点的值方式如下:</p>
|
||||
|
||||
<ul>
|
||||
<li>如果节点是个叶子节点,那么节点的 <strong>值</strong> 为它本身,即 <code>True</code> 或者 <code>False</code> 。</li>
|
||||
<li>否则,<strong>计算</strong> 两个孩子的节点值,然后将该节点的运算符对两个孩子值进行 <strong>运算</strong> 。</li>
|
||||
</ul>
|
||||
|
||||
<p>返回根节点<em> </em><code>root</code> 的布尔运算值。</p>
|
||||
|
||||
<p><strong>完整二叉树</strong> 是每个节点有 <code>0</code> 个或者 <code>2</code> 个孩子的二叉树。</p>
|
||||
|
||||
<p><strong>叶子节点</strong> 是没有孩子的节点。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/05/16/example1drawio1.png" style="width: 700px; height: 252px;"></p>
|
||||
|
||||
<pre><b>输入:</b>root = [2,1,3,null,null,0,1]
|
||||
<b>输出:</b>true
|
||||
<b>解释:</b>上图展示了计算过程。
|
||||
AND 与运算节点的值为 False AND True = False 。
|
||||
OR 运算节点的值为 True OR False = True 。
|
||||
根节点的值为 True ,所以我们返回 true 。</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<pre><b>输入:</b>root = [0]
|
||||
<b>输出:</b>false
|
||||
<b>解释:</b>根节点是叶子节点,且值为 false,所以我们返回 false 。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>树中节点数目在 <code>[1, 1000]</code> 之间。</li>
|
||||
<li><code>0 <= Node.val <= 3</code></li>
|
||||
<li>每个节点的孩子数为 <code>0</code> 或 <code>2</code> 。</li>
|
||||
<li>叶子节点的值为 <code>0</code> 或 <code>1</code> 。</li>
|
||||
<li>非叶子节点的值为 <code>2</code> 或 <code>3</code> 。</li>
|
||||
</ul>
|
Reference in New Issue
Block a user