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-06-12 23:05:37 +08:00
parent 96cb474414
commit 952a47471f
107 changed files with 22284 additions and 13277 deletions

View File

@@ -0,0 +1,57 @@
<p>设计一个类 <code>Calculator</code> 。该类应提供加法、减法、乘法、除法和乘方等数学运算功能。同时,它还应支持连续操作的方法链式调用。<code>Calculator</code> 类的构造函数应接受一个数字作为 <code>result</code> 的初始值。</p>
<p>你的 <code>Calculator</code> 类应包含以下方法:</p>
<ul>
<li><code>add</code> - 将给定的数字 <code>value</code><code>result</code> 相加,并返回更新后的 <code>Calculator</code> 对象。</li>
<li><code>subtract</code> - 从 <code>result</code> 中减去给定的数字 <code>value</code>&nbsp;,并返回更新后的 <code>Calculator</code> 对象。</li>
<li><code>multiply</code> - 将 <code>result</code> 乘以给定的数字 <code>value</code> ,并返回更新后的&nbsp;<code>Calculator</code> 对象。</li>
<li><code>divide</code> - 将 <code>result</code> 除以给定的数字 <code>value</code> ,并返回更新后的&nbsp;<code>Calculator</code> 对象。如果传入的值为 <code>0</code> ,则抛出错误 <code>"Division by zero is not allowed"</code></li>
<li><code>power</code> - 将 <code>result</code> 的值乘以给定的数字 <code>value</code> ,并返回更新后的&nbsp;<code>Calculator</code> 对象。</li>
<li><code>getResult</code> - 返回 <code>result</code> 的值。</li>
</ul>
<p>结果与实际结果相差在 <code>10<sup>-5</sup></code><sup>&nbsp;</sup>范围内的解被认为是正确的。</p>
<p>&nbsp;</p>
<p><b>示例 1</b></p>
<pre>
<b>输入:</b>actions = ["Calculator", "add", "subtract", "getResult"], values = [10, 5, 7]
<b>输出:</b>8
<b>解释:</b>
new Calculator(10).add(5).subtract(7).getResult() // 10 + 5 - 7 = 8
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>actions = ["Calculator", "multiply", "power", "getResult"], values = [2, 5, 2]
<b>输出:</b>100
<b>解释:</b>
new Calculator(2).multiply(5).power(2).getResult() // (2 * 5) ^ 2 = 100
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>actions = ["Calculator", "divide", "getResult"], values = [20, 0]
<b>输出:</b>"Division by zero is not allowed"
<b>解释:</b>
new Calculator(20).divide(0).getResult() // 20 / 0
由于不能除以零,因此应抛出错误。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= actions.length &lt;= 2 * 10<sup>4</sup></code></li>
<li><code>1 &lt;= values.length &lt;= 2 * 10<sup>4</sup></code><code>&nbsp;- 1</code></li>
<li><code>actions[i] 是 "Calculator", "add", "subtract", "multiply", "divide", "power", 和 "getResult" 其中的元素</code></li>
<li><code><font face="monospace">最后一个操作总是&nbsp;"getResult"</font></code></li>
<li><code><font face="monospace">values </font>是一个数字的 JSON 数组</code></li>
</ul>

View File

@@ -0,0 +1,35 @@
<p>给你一个三位数整数 <code>n</code>&nbsp;</p>
<p>如果经过以下修改得到的数字 <strong>恰好</strong>&nbsp;包含数字 <code>1</code>&nbsp;<code>9</code>&nbsp;各一次且不包含任何 <code>0</code>&nbsp;,那么我们称数字 <code>n</code>&nbsp;<strong>迷人的</strong>&nbsp;</p>
<ul>
<li>&nbsp;<code>n</code>&nbsp;与数字&nbsp;<code>2 * n</code>&nbsp;<code>3 * n</code>&nbsp;<strong>连接</strong>&nbsp;</li>
</ul>
<p>如果 <code>n</code>&nbsp;是迷人的,返回&nbsp;<code>true</code>,否则返回&nbsp;<code>false</code>&nbsp;</p>
<p><strong>连接</strong>&nbsp;两个数字表示把它们首尾相接连在一起。比方说&nbsp;<code>121</code>&nbsp;<code>371</code>&nbsp;连接得到&nbsp;<code>121371</code>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>n = 192
<b>输出:</b>true
<b>解释:</b>我们将数字 n = 192 2 * n = 384 和 3 * n = 576 连接,得到 192384576 。这个数字包含 1 到 9 恰好各一次。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>n = 100
<b>输出:</b>false
<b>解释:</b>我们将数字 n = 100 2 * n = 200 和 3 * n = 300 连接,得到 100200300 。这个数字不符合上述条件。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>100 &lt;= n &lt;= 999</code></li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给定一个对象或数组,判断它是否为空。</p>
<ul>
<li>一个空对象不包含任何键值对。</li>
<li>一个空数组不包含任何元素。</li>
</ul>
<p>你可以假设对象或数组是通过 <code>JSON.parse</code> 解析得到的。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>obj = {"x": 5, "y": 42}
<b>输出:</b>false
<b>解释:</b>The object has 2 key-value pairs so it is not empty.
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>obj = {}
<b>输出:</b>true
<b>解释:</b>The object doesn't have any key-value pairs so it is empty.
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>obj = [null, false, 0]
<b>输出:</b>false
<b>解释:</b>The array has 3 elements so it is not empty.
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li>&nbsp;<code>2 &lt;= JSON.stringify(obj).length &lt;= 10<sup>5</sup></code></li>
</ul>
<p>&nbsp;</p>
<strong>你可以在 O(1) 时间复杂度内解决这个问题吗?</strong>

View File

@@ -0,0 +1,54 @@
<p>给你一个下标从 <strong>0</strong> 开始、长度为 <code>n</code> 的整数排列 <code>nums</code></p>
<p>如果排列的第一个数字等于 <code>1</code> 且最后一个数字等于 <code>n</code> ,则称其为 <strong>半有序排列</strong> 。你可以执行多次下述操作,直到将 <code>nums</code> 变成一个 <strong>半有序排列</strong> </p>
<ul>
<li>选择 <code>nums</code> 中相邻的两个元素,然后交换它们。</li>
</ul>
<p>返回使 <code>nums</code> 变成 <strong>半有序排列</strong> 所需的最小操作次数。</p>
<p><strong>排列</strong> 是一个长度为 <code>n</code> 的整数序列,其中包含从 <code>1</code><code>n</code> 的每个数字恰好一次。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [2,1,4,3]
<strong>输出:</strong>2
<strong>解释:</strong>可以依次执行下述操作得到半有序排列:
1 - 交换下标 0 和下标 1 对应元素。排列变为 [1,2,4,3] 。
2 - 交换下标 2 和下标 3 对应元素。排列变为 [1,2,3,4] 。
可以证明,要让 nums 成为半有序排列,不存在执行操作少于 2 次的方案。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [2,4,1,3]
<strong>输出:</strong>3
<strong>解释:
</strong>可以依次执行下述操作得到半有序排列:
1 - 交换下标 1 和下标 2 对应元素。排列变为 [2,1,4,3] 。
2 - 交换下标 0 和下标 1 对应元素。排列变为 [1,2,4,3] 。
3 - 交换下标 2 和下标 3 对应元素。排列变为 [1,2,3,4] 。
可以证明,要让 nums 成为半有序排列,不存在执行操作少于 3 次的方案。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums = [1,3,4,2,5]
<strong>输出:</strong>0
<strong>解释:</strong>这个排列已经是一个半有序排列,无需执行任何操作。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= nums.length == n &lt;= 50</code></li>
<li><code>1 &lt;= nums[i]&nbsp;&lt;= 50</code></li>
<li><code>nums</code> 是一个 <strong>排列</strong></li>
</ul>

View File

@@ -0,0 +1,62 @@
<p>给定一个异步函数数组 <code>functions</code>,返回一个新的 promise 对象&nbsp;<code>promise</code>。数组中的每个函数都不接受参数并返回一个 promise。</p>
<p><code>promise</code> resolve 条件:</p>
<ul>
<li>当所有从 <code>functions</code> 返回的 promise 都成功解析时。<code>promise</code> 的解析值应该是一个按照它们在 <code>functions</code> 中的顺序排列的 promise 的解析值数组。</li>
</ul>
<p><code>promise</code>&nbsp;reject 条件:</p>
<ul>
<li>当任何从 <code>functions</code> 返回的 promise 被拒绝时。<code>promise</code> 也会被拒绝,并返回第一个拒绝的原因。</li>
</ul>
<p>请在不使用内置的 <code>Promise.all</code> 函数的情况下解决。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>functions = [
&nbsp; () =&gt; new Promise(resolve =&gt; setTimeout(() =&gt; resolve(5), 200))
]
<b>输出:</b>{"t": 200, "resolved": [5]}
<b>解释:</b>
promiseAll(functions).then(console.log); // [5]
单个函数在 200 毫秒后以值 5 成功解析。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>functions = [
() =&gt; new Promise(resolve =&gt; setTimeout(() =&gt; resolve(1), 200)),
() =&gt; new Promise((resolve, reject) =&gt; setTimeout(() =&gt; reject("Error"), 100))
]
<b>输出:</b>{"t": 100, "rejected": "Error"}
<b>解释:</b>由于其中一个 promise 被拒绝,返回的 promise 也在同一时间被拒绝并返回相同的错误。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>functions = [
() =&gt; new Promise(resolve =&gt; setTimeout(() =&gt; resolve(4), 50)),
() =&gt; new Promise(resolve =&gt; setTimeout(() =&gt; resolve(10), 150)),
() =&gt; new Promise(resolve =&gt; setTimeout(() =&gt; resolve(16), 100))
]
<b>输出:</b>{"t": 150, "resolved": [4, 10, 16]}
<b>解释:</b>所有的 promise 都成功执行。当最后一个 promise 被解析时,返回的 promise 也被解析了。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>functions&nbsp;is an array of functions that returns promises</code></li>
<li><code>1 &lt;= functions.length &lt;= 10</code></li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>现给定一个函数 <code>fn</code>&nbsp;,一个参数数组 <code>args</code> 和一个以毫秒为单位的超时时间 <code>t</code> ,返回一个取消函数 <code>cancelFn</code></p>
<p>在经过 <code>t</code> 毫秒的延迟后,<strong>除非</strong> 先调用 <code>cancelFn</code> ,否则&nbsp;<code>fn</code> 应该以 <code>args</code> 作为参数被调用。并且在这种情况下,<code>fn</code> 不应该被调用。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1:</strong></p>
<pre>
<b>输入:</b>fn = (x) =&gt; x * 5, args = [2], t = 20, cancelTime = 50
<b>输出:</b>[{"time": 20, "returned": 10}]
<b>解释:</b>
const cancel = cancellable(fn, [2], 20); // // 在 t=20ms 时调用 fn(2)
setTimeout(cancel, 50);
cancelTime50ms在延迟时间20ms之后所以 fn(2) 应该在 t=20ms 时调用。fn 的返回值是 10。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>fn = (x) =&gt; x**2, args = [2], t = 100, cancelTime = 50
<b>输出:</b>[]
<b>解释:</b>fn(2) 从未被调用,因为 cancelTime50ms在延迟时间100ms之前。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>fn = (x1, x2) =&gt; x1 * x2, args = [2,4], t = 30, cancelTime = 100
<b>输出:</b>[{"time": 30, "returned": 8}]
<b>解释:</b>fn(2) 从未被调用,因为 cancelTime50ms在延迟时间100ms之前。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>fn 是一个函数</code></li>
<li><code>args 是一个有效的 JSON 数组</code></li>
<li><code>1 &lt;= args.length &lt;= 10</code></li>
<li><code><font face="monospace">20 &lt;= t &lt;= 1000</font></code></li>
<li><code><font face="monospace">10 &lt;= cancelT &lt;= 1000</font></code></li>
</ul>

View File

@@ -0,0 +1,45 @@
<p>给你一个仅由小写英文字母组成的字符串 <code>s</code> 。在一步操作中,你可以完成以下行为:</p>
<ul>
<li>选则 <code>s</code> 的任一非空子字符串,可能是整个字符串,接着将字符串中的每一个字符替换为英文字母表中的前一个字符。例如,'b' 用 'a' 替换,'a' 用 'z' 替换。</li>
</ul>
<p>返回执行上述操作 <strong>恰好一次</strong> 后可以获得的 <strong>字典序最小</strong> 的字符串。</p>
<p><strong>子字符串</strong> 是字符串中的一个连续字符序列。</p>
现有长度相同的两个字符串 <code>x</code> 和 字符串 <code>y</code> ,在满足&nbsp;<code>x[i] != y[i]</code> 的第一个位置 <code>i</code> 上,如果&nbsp; <code>x[i]</code> 在字母表中先于 <code>y[i]</code> 出现,则认为字符串 <code>x</code> 比字符串 <code>y</code> <strong>字典序更小</strong>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>s = "cbabc"
<strong>输出:</strong>"baabc"
<strong>解释:</strong>我们选择从下标 0 开始、到下标 1 结束的子字符串执行操作。
可以证明最终得到的字符串是字典序最小的。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>s = "acbbc"
<strong>输出:</strong>"abaab"
<strong>解释:</strong>我们选择从下标 1 开始、到下标 4 结束的子字符串执行操作。
可以证明最终得到的字符串是字典序最小的。
</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>s = "leetcode"
<strong>输出:</strong>"kddsbncd"
<strong>解释:</strong>我们选择整个字符串执行操作。
可以证明最终得到的字符串是字典序最小的。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 3 * 10<sup>5</sup></code></li>
<li><code>s</code> 仅由小写英文字母组成</li>
</ul>

View File

@@ -0,0 +1,42 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的字符串&nbsp;<code>s</code>&nbsp;,这个字符串只包含&nbsp;<code>0</code>&nbsp;&nbsp;<code>9</code>&nbsp;的数字字符。</p>
<p>如果一个字符串&nbsp;<code>t</code>&nbsp;中至多有一对相邻字符是相等的,那么称这个字符串是 <strong>半重复的</strong>&nbsp;</p>
<p>请你返回 <code>s</code>&nbsp;中最长 <strong>半重复</strong>&nbsp;子字符串的长度。</p>
<p>一个 <strong>子字符串</strong>&nbsp;是一个字符串中一段连续 <strong>非空</strong>&nbsp;的字符。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>s = "52233"
<b>输出:</b>4
<b>解释:</b>最长半重复子字符串是 "5223" ,子字符串从 i = 0 开始,在 j = 3 处结束。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>s = "5494"
<b>输出:</b>4
<b>解释:</b>s 就是一个半重复字符串,所以答案为 4 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<b>输入:</b>s = "1111111"
<b>输出:</b>2
<b>解释:</b>最长半重复子字符串是 "11" ,子字符串从 i = 0 开始,在 j = 1 处结束。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 50</code></li>
<li><code>'0' &lt;= s[i] &lt;= '9'</code></li>
</ul>

View File

@@ -0,0 +1,56 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始大小为&nbsp;<code>m x n</code>&nbsp;的二进制矩阵&nbsp;<code>grid</code>&nbsp;</p>
<p>从原矩阵中选出若干行构成一个行的 <strong>非空&nbsp;</strong>子集,如果子集中任何一列的和至多为子集大小的一半,那么我们称这个子集是 <strong>好子集</strong></p>
<p>更正式的,如果选出来的行子集大小(即行的数量)为 k那么每一列的和至多为&nbsp;<code>floor(k / 2)</code>&nbsp;</p>
<p>请你返回一个整数数组,它包含好子集的行下标,请你将子集中的元素&nbsp;<b>升序</b>&nbsp;返回。</p>
<p>如果有多个好子集,你可以返回任意一个。如果没有好子集,请你返回一个空数组。</p>
<p>一个矩阵 <code>grid</code>&nbsp;的行 <strong>子集</strong> ,是删除 <code>grid</code>&nbsp;中某些(也可能不删除)行后,剩余行构成的元素集合。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>grid = [[0,1,1,0],[0,0,0,1],[1,1,1,1]]
<b>输出:</b>[0,1]
<b>解释:</b>我们可以选择第 0 和第 1 行构成一个好子集。
选出来的子集大小为 2 。
- 第 0&nbsp;列的和为 0 + 0 = 0 ,小于等于子集大小的一半。
- 第 1&nbsp;列的和为 1 + 0 = 1 ,小于等于子集大小的一半。
- 第 2&nbsp;列的和为 1 + 0 = 1 ,小于等于子集大小的一半。
- 第 3&nbsp;列的和为 0 + 1 = 1 ,小于等于子集大小的一半。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>grid = [[0]]
<b>输出:</b>[0]
<strong>解释:</strong>我们可以选择第 0 行构成一个好子集。
选出来的子集大小为 1 。
- 第 0 列的和为 0 ,小于等于子集大小的一半。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<b>输入:</b>grid = [[1,1,1],[1,1,1]]
<b>输出:</b>[]
<b>解释:</b>没有办法得到一个好子集。
</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 &lt;= 10<sup>4</sup></code></li>
<li><code>1 &lt;= n &lt;= 5</code></li>
<li><code>grid[i][j]</code>&nbsp;要么是&nbsp;<code>0</code>&nbsp;,要么是&nbsp;<code>1</code></li>
</ul>

View File

@@ -0,0 +1,39 @@
<p>给定一个数组 <code>arr</code> 和一个函数 <code>fn</code>,返回一个排序后的数组 <code>sortedArr</code>。你可以假设 <code>fn</code> 只返回数字,并且这些数字决定了 <code>sortedArr</code> 的排序顺序。<code>sortedArr</code> 必须按照 <code>fn</code> 的输出值&nbsp;<strong>升序</strong> 排序。</p>
<p>你可以假设对于给定的数组,<code>fn</code> 不会返回重复的数字。</p>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>arr = [5, 4, 1, 2, 3], fn = (x) =&gt; x
<b>输出:</b>[1, 2, 3, 4, 5]
<b>解释:</b>fn 只是返回传入的数字,因此数组按升序排序。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>arr = [{"x": 1}, {"x": 0}, {"x": -1}], fn = (d) =&gt; d.x
<b>输出:</b>[{"x": -1}, {"x": 0}, {"x": 1}]
<b>解释:</b>fn 返回 "x" 键的值,因此数组根据该值排序。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>arr = [[3, 4], [5, 2], [10, 1]], fn = (x) =&gt; x[1]
<b>输出:</b>[[10, 1], [5, 2], [3, 4]]
<b>解释:</b>数组按照索引为 1 处的数字升序排序。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>arr 是一个有效的 JSON 数组</code></li>
<li><code>fn 是一个函数,返回一个数字</code></li>
<li><code>1 &lt;=&nbsp;arr.length &lt;= 5 * 10<sup>5</sup></code></li>
</ul>

View File

@@ -0,0 +1,40 @@
<p>给你一个长度为 <code>n</code> 、下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> ,表示收集不同巧克力的成本。每个巧克力都对应一个不同的类型,最初,位于下标 <code>i</code> 的巧克力就对应第 <code>i</code> 个类型。</p>
<p>在一步操作中,你可以用成本 <code>x</code> 执行下述行为:</p>
<ul>
<li>同时修改所有巧克力的类型,将巧克力的类型&nbsp;<code>i<sup>th</sup></code>&nbsp;修改为类型&nbsp;<code>((i + 1) mod n)<sup>th</sup></code></li>
</ul>
<p>假设你可以执行任意次操作,请返回收集所有类型巧克力所需的最小成本。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums = [20,1,15], x = 5
<strong>输出:</strong>13
<strong>解释:</strong>最开始,巧克力的类型分别是 [0,1,2] 。我们可以用成本 1 购买第 1 个类型的巧克力。
接着,我们用成本 5 执行一次操作,巧克力的类型变更为 [1,2,0] 。我们可以用成本 1 购买第 2 个类型的巧克力。
然后,我们用成本 5 执行一次操作,巧克力的类型变更为 [2,0,1] 。我们可以用成本 1 购买第 0 个类型的巧克力。
因此,收集所有类型的巧克力需要的总成本是 (1 + 5 + 1 + 5 + 1) = 13 。可以证明这是一种最优方案。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums = [1,2,3], x = 4
<strong>输出:</strong>6
<strong>解释:</strong>我们将会按最初的成本收集全部三个类型的巧克力,而不需执行任何操作。因此,收集所有类型的巧克力需要的总成本是 1 + 2 + 3 = 6 。
</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>9</sup></code></li>
<li><code>1 &lt;= x &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,36 @@
<p>给你一个整数数组 <code>nums</code> ,数组由 <strong>不同正整数</strong> 组成,请你找出并返回数组中 <strong>任一</strong> 既不是 <strong>最小值</strong> 也不是 <strong>最大值</strong> 的数字,如果不存在这样的数字,返回 <strong><code>-1</code></strong></p>
<p>返回所选整数。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>nums = [3,2,1,4]
<strong>输出:</strong>2
<strong>解释:</strong>在这个示例中,最小值是 1 ,最大值是 4 。因此2 或 3 都是有效答案。
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>nums = [1,2]
<strong>输出:</strong>-1
<strong>解释:</strong>由于不存在既不是最大值也不是最小值的数字,我们无法选出满足题目给定条件的数字。因此,不存在答案,返回 -1 。
</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>nums = [2,1,3]
<strong>输出:</strong>2
<strong>解释:</strong>2 既不是最小值,也不是最大值,这个示例只有这一个有效答案。
</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> 中的所有数字互不相同</li>
</ul>

View File

@@ -0,0 +1,48 @@
<p>给你两个长度为 <code>n</code> 、下标从 <strong>0</strong> 开始的整数数组 <code>nums1</code><code>nums2</code> ,另给你一个下标从 <strong>1</strong> 开始的二维数组 <code>queries</code> ,其中 <code>queries[i] = [x<sub>i</sub>, y<sub>i</sub>]</code></p>
<p>对于第 <code>i</code> 个查询,在所有满足 <code>nums1[j] &gt;= x<sub>i</sub></code><code>nums2[j] &gt;= y<sub>i</sub></code> 的下标 <code>j</code> <code>(0 &lt;= j &lt; n)</code> 中,找出 <code>nums1[j] + nums2[j]</code><strong>最大值</strong> ,如果不存在满足条件的 <code>j</code> 则返回 <strong>-1</strong></p>
<p>返回数组<em> </em><code>answer</code><em> </em>其中<em> </em><code>answer[i]</code><em> </em>是第 <code>i</code> 个查询的答案。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>nums1 = [4,3,1,2], nums2 = [2,4,9,5], queries = [[4,1],[1,3],[2,5]]
<strong>输出:</strong>[6,10,7]
<strong>解释:</strong>
对于第 1 个查询:<code>x<sub>i</sub> = 4</code>&nbsp;&nbsp;<code>y<sub>i</sub> = 1</code> ,可以选择下标&nbsp;<code>j = 0</code>&nbsp;,此时 <code>nums1[j] &gt;= 4</code>&nbsp;&nbsp;<code>nums2[j] &gt;= 1</code><code>nums1[j] + nums2[j]</code>&nbsp;等于 6 ,可以证明 6 是可以获得的最大值。
对于第 2 个查询:<code>x<sub>i</sub> = 1</code>&nbsp;&nbsp;<code>y<sub>i</sub> = 3</code> ,可以选择下标&nbsp;<code>j = 2</code>&nbsp;,此时 <code>nums1[j] &gt;= 1</code>&nbsp;&nbsp;<code>nums2[j] &gt;= 3</code><code>nums1[j] + nums2[j]</code>&nbsp;等于 10 ,可以证明 10 是可以获得的最大值。
对于第 3 个查询:<code>x<sub>i</sub> = 2</code>&nbsp;&nbsp;<code>y<sub>i</sub> = 5</code> ,可以选择下标&nbsp;<code>j = 3</code>&nbsp;,此时 <code>nums1[j] &gt;= 2</code>&nbsp;&nbsp;<code>nums2[j] &gt;= 5</code><code>nums1[j] + nums2[j]</code>&nbsp;等于 7 ,可以证明 7 是可以获得的最大值。
因此,我们返回&nbsp;<code>[6,10,7]</code>
</pre>
<p><strong>示例 2</strong></p>
<pre><strong>输入:</strong>nums1 = [3,2,5], nums2 = [2,3,4], queries = [[4,4],[3,2],[1,1]]
<strong>输出:</strong>[9,9,9]
<strong>解释:</strong>对于这个示例,我们可以选择下标&nbsp;<code>j = 2</code>&nbsp;,该下标可以满足每个查询的限制。
</pre>
<p><strong>示例 3</strong></p>
<pre><strong>输入:</strong>nums1 = [2,1], nums2 = [2,3], queries = [[3,3]]
<strong>输出:</strong>[-1]
<strong>解释:</strong>示例中的查询 <code>x<sub>i</sub></code> = 3 且 <code>y<sub>i</sub></code> = 3 。对于每个下标 j ,都只满足 nums1[j] &lt; <code>x<sub>i</sub></code> 或者 nums2[j] &lt; <code>y<sub>i</sub></code> 。因此,不存在答案。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>nums1.length == nums2.length</code>&nbsp;</li>
<li><code>n ==&nbsp;nums1.length&nbsp;</code></li>
<li><code>1 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums1[i], nums2[i] &lt;= 10<sup>9</sup>&nbsp;</code></li>
<li><code>1 &lt;= queries.length &lt;= 10<sup>5</sup></code></li>
<li><code>queries[i].length ==&nbsp;2</code></li>
<li><code>x<sub>i</sub>&nbsp;== queries[i][1]</code></li>
<li><code>y<sub>i</sub> == queries[i][2]</code></li>
<li><code>1 &lt;= x<sub>i</sub>, y<sub>i</sub> &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,42 @@
<p>给你一个下标从 <strong>0</strong> 开始的字符串 <code>s</code> ,重复执行下述操作 <strong>任意</strong> 次:</p>
<ul>
<li>在字符串中选出一个下标 <code>i</code> ,并使 <code>c</code> 为字符串下标 <code>i</code> 处的字符。并在 <code>i</code> <strong>左侧</strong>(如果有)和 <strong>右侧</strong>(如果有)各 <strong>删除 </strong>一个距离 <code>i</code> <strong>最近</strong> 的字符 <code>c</code></li>
</ul>
<p>请你通过执行上述操作任意次,使 <code>s</code> 的长度 <strong>最小化</strong></p>
<p>返回一个表示 <strong>最小化</strong> 字符串的长度的整数。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>s = "aaabc"
<strong>输出:</strong>3
<strong>解释:</strong>在这个示例中s 等于 "aaabc" 。我们可以选择位于下标 1 处的字符 'a' 开始。接着删除下标 1 左侧最近的那个 'a'(位于下标 0以及下标 1 右侧最近的那个 'a'(位于下标 2。执行操作后字符串变为 "abc" 。继续对字符串执行任何操作都不会改变其长度。因此,最小化字符串的长度是 3 。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>s = "cbbd"
<strong>输出:</strong>3
<strong>解释:</strong>我们可以选择位于下标 1 处的字符 'b' 开始。下标 1 左侧不存在字符 'b' ,但右侧存在一个字符 'b'(位于下标 2所以会删除位于下标 2 的字符 'b' 。执行操作后,字符串变为 "cbd" 。继续对字符串执行任何操作都不会改变其长度。因此,最小化字符串的长度是 3 。</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>s = "dddaaa"
<strong>输出:</strong>2
<strong>解释:</strong>我们可以选择位于下标 1 处的字符 'd' 开始。接着删除下标 1 左侧最近的那个 'd'(位于下标 0以及下标 1 右侧最近的那个 'd'(位于下标 2。执行操作后字符串变为 "daaa" 。继续对新字符串执行操作,可以选择位于下标 2 的字符 'a' 。接着删除下标 2 左侧最近的那个 'a'(位于下标 1以及下标 2 右侧最近的那个 'a'(位于下标 3。执行操作后字符串变为 "da" 。继续对字符串执行任何操作都不会改变其长度。因此,最小化字符串的长度是 2 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 100</code></li>
<li><code>s</code> 仅由小写英文字母组成</li>
</ul>

View File

@@ -0,0 +1,43 @@
<p>给你一个整数&nbsp;<code>n</code>&nbsp;和一个下标从 <strong>0</strong>&nbsp;开始的 <strong>二维数组</strong>&nbsp;<code>queries</code>&nbsp;,其中&nbsp;<code>queries[i] = [type<sub>i</sub>, index<sub>i</sub>, val<sub>i</sub>]</code>&nbsp;</p>
<p>一开始,给你一个下标从 <strong>0</strong>&nbsp;开始的&nbsp;<code>n x n</code>&nbsp;矩阵,所有元素均为 <code>0</code>&nbsp;。每一个查询,你需要执行以下操作之一:</p>
<ul>
<li>如果&nbsp;<code>type<sub>i</sub> == 0</code>&nbsp;,将第&nbsp;<code>index<sub>i</sub></code>&nbsp;行的元素全部修改为&nbsp;<code>val<sub>i</sub></code>&nbsp;,覆盖任何之前的值。</li>
<li>如果&nbsp;<code>type<sub>i</sub> == 1</code>&nbsp;,将第&nbsp;<code>index<sub>i</sub></code>&nbsp;列的元素全部修改为 <code>val<sub>i</sub></code>&nbsp;,覆盖任何之前的值。</li>
</ul>
<p>请你执行完所有查询以后,返回矩阵中所有整数的和。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2023/05/11/exm1.png" style="width: 681px; height: 161px;"></p>
<pre><b>输入:</b>n = 3, queries = [[0,0,1],[1,2,2],[0,2,3],[1,0,4]]
<b>输出:</b>23
<b>解释:</b>上图展示了每个查询以后矩阵的值。所有操作执行完以后,矩阵元素之和为 23 。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2023/05/11/exm2.png" style="width: 681px; height: 331px;"></p>
<pre><b>输入:</b>n = 3, queries = [[0,0,4],[0,1,2],[1,0,1],[0,2,3],[1,2,1]]
<b>输出:</b>17
<b>解释:</b>上图展示了每一个查询操作之后的矩阵。所有操作执行完以后,矩阵元素之和为 17 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 10<sup>4</sup></code></li>
<li><code>1 &lt;= queries.length &lt;= 5 * 10<sup>4</sup></code></li>
<li><code>queries[i].length == 3</code></li>
<li><code>0 &lt;= type<sub>i</sub> &lt;= 1</code></li>
<li><code>0 &lt;= index<sub>i</sub>&nbsp;&lt; n</code></li>
<li><code>0 &lt;= val<sub>i</sub> &lt;= 10<sup>5</sup></code></li>
</ul>

View File

@@ -0,0 +1,79 @@
<p>现给定两个数组 <code>arr1</code><code>arr2</code> ,返回一个新的数组 <code>joinedArray</code> 。两个输入数组中的每个对象都包含一个 <code>id</code> 字段。<code>joinedArray</code> 是一个通过 <code>id</code><code>arr1</code><code>arr2</code> 连接而成的数组。<code>joinedArray</code> 的长度应为唯一值 <code>id</code> 的长度。返回的数组应按 <code>id</code> <strong>升序</strong> 排序。</p>
<p>如果一个 <code>id</code> 存在于一个数组中但不存在于另一个数组中,则该对象应包含在结果数组中且不进行修改。</p>
<p>如果两个对象共享一个 <code>id</code> ,则它们的属性应进行合并:</p>
<ul>
<li>如果一个键只存在于一个对象中,则该键值对应该包含在对象中。</li>
<li>如果一个键在两个对象中都包含,则 <code>arr2</code> 中的值应覆盖 <code>arr1</code> 中的值。</li>
</ul>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>
arr1 = [
&nbsp; {"id": 1, "x": 1},
&nbsp; {"id": 2, "x": 9}
],
arr2 = [
{"id": 3, "x": 5}
]
<b>输出:</b>
[
&nbsp; {"id": 1, "x": 1},
&nbsp; {"id": 2, "x": 9},
{"id": 3, "x": 5}
]
<b>解释:</b>没有共同的 id因此将 arr1 与 arr2 简单地连接起来。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>
arr1 = [
{"id": 1, "x": 2, "y": 3},
{"id": 2, "x": 3, "y": 6}
],
arr2 = [
{"id": 2, "x": 10, "y": 20},
{"id": 3, "x": 0, "y": 0}
]
<b>输出:</b>
[
{"id": 1, "x": 2, "y": 3},
{"id": 2, "x": 10, "y": 20},
&nbsp; {"id": 3, "x": 0, "y": 0}
]
<b>解释:</b>id 为 1 和 id 为 3 的对象在结果数组中保持不变。id 为 2 的两个对象合并在一起。arr2 中的键覆盖 arr1 中的值。
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>
arr1 = [
{"id": 1, "b": {"b": 94},"v": [4, 3], "y": 48}
]
arr2 = [
{"id": 1, "b": {"c": 84}, "v": [1, 3]}
]
<strong>输出:</strong> [
{"id": 1, "b": {"c": 84}, "v": [1, 3], "y": 48}
]
<b>解释:</b>具有 id 为 1 的对象合并在一起。对于键 "b" 和 "v" ,使用 arr2 中的值。由于键 "y" 只存在于 arr1 中,因此取 arr1 的值。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>arr1 和 arr2 都是有效的 JSON 数组</code></li>
<li><code>在 arr1 和 arr2 中都有唯一的键值 id</code></li>
<li><code>2 &lt;= JSON.stringify(arr1).length &lt;= 10<sup>6</sup></code></li>
<li><code>2 &lt;= JSON.stringify(arr2).length &lt;= 10<sup>6</sup></code></li>
</ul>

View File

@@ -0,0 +1,30 @@
给定两个 promise 对象&nbsp;<code>promise1</code><code>promise2</code>,返回一个新的 promise。<code>promise1</code><code>promise2</code> 都会被解析为一个数字。返回的 Promise 应该解析为这两个数字的和。
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>
promise1 = new Promise(resolve =&gt; setTimeout(() =&gt; resolve(2), 20)),
promise2 = new Promise(resolve =&gt; setTimeout(() =&gt; resolve(5), 60))
<b>输出:</b>7
<b>解释:</b>两个输入的 Promise 分别解析为值 2 和 5。返回的 Promise 应该解析为 2 + 5 = 7。返回的 Promise 解析的时间不作为判断条件。
</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>
promise1 = new Promise(resolve =&gt; setTimeout(() =&gt; resolve(10), 50)),
promise2 = new Promise(resolve =&gt; setTimeout(() =&gt; resolve(-12), 30))
<b>输出:</b>-2
<b>解释:</b>两个输入的 Promise 分别解析为值 10 和 -12。返回的 Promise 应该解析为 10 + -12 = -2。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>promise1 和 promise2 都是被解析为一个数字的 promise 对象</code></li>
</ul>

View File

@@ -0,0 +1,67 @@
<p>有一些机器人分布在一条无限长的数轴上,他们初始坐标用一个下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>nums</code>&nbsp;表示。当你给机器人下达命令时,它们以每秒钟一单位的速度开始移动。</p>
<p>给你一个字符串&nbsp;<code>s</code>&nbsp;,每个字符按顺序分别表示每个机器人移动的方向。<code>'L'</code>&nbsp;表示机器人往左或者数轴的负方向移动,<code>'R'</code>&nbsp;表示机器人往右或者数轴的正方向移动。</p>
<p>当两个机器人相撞时,它们开始沿着原本相反的方向移动。</p>
<p>请你返回指令重复执行 <code>d</code>&nbsp;秒后,所有机器人之间两两距离之和。由于答案可能很大,请你将答案对&nbsp;<code>10<sup>9</sup> + 7</code>&nbsp;取余后返回。</p>
<p><b>注意:</b></p>
<ul>
<li>对于坐标在&nbsp;<code>i</code>&nbsp;<code>j</code>&nbsp;的两个机器人,<code>(i,j)</code>&nbsp;&nbsp;<code>(j,i)</code>&nbsp;视为相同的坐标对。也就是说,机器人视为无差别的。</li>
<li>当机器人相撞时,它们 <strong>立即改变</strong>&nbsp;它们的前进时间,这个过程不消耗任何时间。</li>
<li>
<p>当两个机器人在同一时刻占据相同的位置时,就会相撞。</p>
<ul>
<li>
<p>例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 2 并往左移动,下一秒,它们都将占据位置 1并改变方向。再下一秒钟后第一个机器人位于位置 0 并往左移动,而另一个机器人位于位置 2 并往右移动。</p>
</li>
<li>
<p>例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 1 并往左移动,下一秒,第一个机器人位于位置 0 并往左行驶,而另一个机器人位于位置 1 并往右移动。</p>
</li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>nums = [-2,0,2], s = "RLL", d = 3
<b>输出:</b>8
<b>解释:</b>
1 秒后,机器人的位置为 [-1,-1,1] 。现在下标为 0 的机器人开始往左移动,下标为 1 的机器人开始往右移动。
2 秒后,机器人的位置为 [-2,0,0] 。现在下标为 1 的机器人开始往左移动,下标为 2 的机器人开始往右移动。
3 秒后,机器人的位置为 [-3,-1,1] 。
下标为 0 和 1 的机器人之间距离为 abs(-3 - (-1)) = 2 。
下标为 0 和 2 的机器人之间的距离为 abs(-3 - 1) = 4 。
下标为 1 和 2 的机器人之间的距离为 abs(-1 - 1) = 2 。
所有机器人对之间的总距离为 2 + 4 + 2 = 8 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>nums = [1,0], s = "RL", d = 2
<b>输出:</b>5
<b>解释:</b>
1 秒后,机器人的位置为 [2,-1] 。
2 秒后,机器人的位置为 [3,-2] 。
两个机器人的距离为 abs(-2 - 3) = 5 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
<li><code>-2 * 10<sup>9</sup>&nbsp;&lt;= nums[i] &lt;= 2 * 10<sup>9</sup></code></li>
<li><code>0 &lt;= d &lt;= 10<sup>9</sup></code></li>
<li><code>nums.length == s.length&nbsp;</code></li>
<li><code>s</code>&nbsp;只包含&nbsp;<code>'L'</code><code>'R'</code>&nbsp;</li>
<li><code>nums[i]</code>&nbsp;互不相同。</li>
</ul>

View File

@@ -0,0 +1,37 @@
<p>给你两个数字字符串&nbsp;<code>num1</code>&nbsp;&nbsp;<code>num2</code>&nbsp;,以及两个整数&nbsp;<code>max_sum</code>&nbsp;<code>min_sum</code>&nbsp;。如果一个整数&nbsp;<code>x</code>&nbsp;满足以下条件,我们称它是一个好整数:</p>
<ul>
<li><code>num1 &lt;= x &lt;= num2</code></li>
<li><code>min_sum &lt;= digit_sum(x) &lt;= max_sum</code>.</li>
</ul>
<p>请你返回好整数的数目。答案可能很大,请返回答案对&nbsp;<code>10<sup>9</sup> + 7</code>&nbsp;取余后的结果。</p>
<p>注意,<code>digit_sum(x)</code>&nbsp;表示&nbsp;<code>x</code>&nbsp;各位数字之和。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>num1 = "1", num2 = "12", min_num = 1, max_num = 8
<b>输出:</b>11
<b>解释:</b>总共有 11 个整数的数位和在 1 到 8 之间,分别是 1,2,3,4,5,6,7,8,10,11 和 12 。所以我们返回 11 。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>num1 = "1", num2 = "5", min_num = 1, max_num = 5
<b>输出:</b>5
<b>解释:</b>数位和在 1 到 5 之间的 5 个整数分别为 1,2,3,4 和 5 。所以我们返回 5 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= num1 &lt;= num2 &lt;= 10<sup>22</sup></code></li>
<li><code>1 &lt;= min_sum &lt;= max_sum &lt;= 400</code></li>
</ul>

View File

@@ -0,0 +1,79 @@
现给定一个函数 <code>fn</code>,一个参数数组 <code>args</code> 和一个时间间隔 <code>t</code>,返回一个取消函数 <code>cancelFn</code>。函数 <code>fn</code> 应该立即使用 <code>args</code> 调用,并且在每个 <code>t</code> 毫秒内再次调用,直到调用 <code>cancelFn</code>
<p>&nbsp;</p>
<p><strong class="example">示例 1</strong></p>
<pre>
<b>输入:</b>fn = (x) =&gt; x * 2, args = [4], t = 20, cancelT = 110
<b>输出:</b>
[
{"time": 0, "returned": 8},
{"time": 20, "returned": 8},
{"time": 40, "returned": 8},
{"time": 60, "returned": 8},
{"time": 80, "returned": 8},
{"time": 100, "returned": 8}
]
<strong>解释:</strong> 每隔 20ms调用 fn(4)。直到 t=110ms然后取消。
const cancel = cancellable(x =&gt; x * 2, [4], 20);
setTimeout(cancel, 110);
第一次调用 fn 是在 0ms。fn(4) 返回 8。
第二次调用 fn 是在 20ms。fn(4) 返回 8。
第三次调用 fn 是在 40ms。fn(4) 返回 8。
第四次调用 fn 是在&nbsp;60ms。fn(4) 返回 8。
第五次调用 fn 是在 80ms。fn(4) 返回 8。
第六次调用 fn 是在 100ms。fn(4) 返回 8。</pre>
<p><strong class="example">示例 2</strong></p>
<pre>
<b>输入:</b>fn = (x1, x2) =&gt; (x1 * x2), args = [2, 5], t = 25, cancelT = 140
<strong>输出:</strong>
[
{"time": 0, "returned": 10},
{"time": 25, "returned": 10},
{"time": 50, "returned": 10},
{"time": 75, "returned": 10},
{"time": 100, "returned": 10},
{"time": 125, "returned": 10}
]
<strong>解释:</strong>每隔 25ms调用 fn(2, 5)。直到 t=140ms然后取消。
第一次调用 fn 是在 0ms
第二次调用 fn 是在 25ms
第三次调用 fn 是在 50ms
第四次调用 fn 是在&nbsp;75ms
第五次调用 fn 是在 100ms
第六次调用 fn 是在 125ms
在 140ms 取消
</pre>
<p><strong class="example">示例 3</strong></p>
<pre>
<b>输入:</b>fn = (x1, x2, x3) =&gt; (x1 + x2 + x3), args = [5, 1, 3], t = 50, cancelT = 180
<b>输出:</b>
[
{"time": 0, "returned": 9},
{"time": 50, "returned": 9},
{"time": 100, "returned": 9},
{"time": 150, "returned": 9}
]
<b>解释:</b>每隔 50ms调用 fn(5, 1, 3)。直到 t=180ms然后取消。
第一次调用 fn 是在 0ms
第二次调用 fn 是在 50ms
第三次调用 fn 是在 100ms
第四次调用 fn 是在&nbsp;150ms
在 180ms 取消
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>fn 是一个函数</code></li>
<li><code>args 是一个有效的 JSON 数组</code></li>
<li><code>1 &lt;= args.length &lt;= 10</code></li>
<li><code><font face="monospace">20 &lt;= t &lt;= 1000</font></code></li>
<li><code><font face="monospace">10 &lt;= cancelT &lt;= 1000</font></code></li>
</ul>