mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-09-13 11:21:42 +08:00
批量更新数据
This commit is contained in:
@@ -1,36 +1,47 @@
|
||||
<p>给你一个下标从 <strong>0</strong> 开始的字符串数组 <code>words</code> ,其中 <code>words[i]</code> 要么是一个字符串形式的正整数,要么是字符串 <code>"prev"</code> 。</p>
|
||||
<p>给你一个整数数组 <code>nums</code> ,其中 <code>nums[i]</code> 要么是一个正整数,要么是 <code>-1</code> 。我们需要为每个 <code>-1</code> 找到相应的正整数,我们称之为最后访问的整数。</p>
|
||||
|
||||
<p>我们从数组的开头开始遍历,对于 <code>words</code> 中的每个 <code>"prev"</code> 字符串,找到 <code>words</code> 中的 <strong>上一个遍历的整数</strong> ,定义如下:</p>
|
||||
<p>为了达到这个目标,定义两个空数组:<code>seen</code> 和 <code>ans</code>。</p>
|
||||
|
||||
<p>从数组 <code>nums</code> 的头部开始遍历。</p>
|
||||
|
||||
<ul>
|
||||
<li><code>k</code> 表示到当前位置为止的连续 <code>"prev"</code> 字符串数目(包含当前字符串),令下标从 <strong>0</strong> 开始的 <strong>整数</strong> 数组 <code>nums</code> 表示目前为止遍历过的所有整数,同时用 <code>nums_reverse</code> 表示 <code>nums</code> 反转得到的数组,那么当前 <code>"prev"</code> 对应的 <strong>上一个遍历的整数</strong> 是 <code>nums_reverse</code> 数组中下标为 <code>(k - 1)</code> 的整数。</li>
|
||||
<li>如果 <code>k</code> 比目前为止遍历过的整数数目 <strong>更多</strong> ,那么上一个遍历的整数为 <code>-1</code> 。</li>
|
||||
<li>如果遇到正整数,把它添加到 <code>seen</code> 的 <strong>头部</strong>。</li>
|
||||
<li>如果遇到 <code>-1</code>,则设 <code>k</code> 是到目前为止看到的 <strong>连续</strong> <code>-1</code> 的数目(包括当前 <code>-1</code>),
|
||||
<ul>
|
||||
<li>如果 <code>k</code> 小于等于 <code>seen</code> 的长度,把 <code>seen</code> 的第 <code>k</code> 个元素添加到 <code>ans</code>。</li>
|
||||
<li>如果 <code>k</code> 严格大于 <code>seen</code> 的长度,把 <code>-1</code> 添加到 <code>ans</code>。</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>请你返回一个整数数组,包含所有上一个遍历的整数。</p>
|
||||
<p>请你返回数组 <code>ans</code>。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong class="example">示例 1:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b><code>words</code> = ["1","2","prev","prev","prev"]
|
||||
<b>输入:</b>nums = [1,2,-1,-1,-1]
|
||||
<b>输出:</b>[2,1,-1]
|
||||
<b>解释:</b>
|
||||
对于下标为 2 处的 "prev" ,上一个遍历的整数是 2 ,因为连续 "prev" 数目为 1 ,同时在数组 reverse_nums 中,第一个元素是 2 。
|
||||
对于下标为 3 处的 "prev" ,上一个遍历的整数是 1 ,因为连续 "prev" 数目为 2 ,同时在数组 reverse_nums 中,第二个元素是 1 。
|
||||
对于下标为 4 处的 "prev" ,上一个遍历的整数是 -1 ,因为连续 "prev" 数目为 3 ,但总共只遍历过 2 个整数。
|
||||
<b>解释:</b> 开始时 seen = [] 且 ans = []。
|
||||
1.处理 nums[0]:nums 中的第一个元素是 1。我们将其放在 seen 的前面。现在,seen == [1]。
|
||||
2.处理 nums[1]:下一个元素是 2。我们将其放在 seen 的前面。现在,seen == [2, 1]。
|
||||
3.处理 nums[2]:下一个元素是 -1。这是 -1 的第一次出现,所以 k == 1。我们找到 seen 中的第一个元素,把 2 添加到 ans。现在,ans == [2]。
|
||||
4.处理 nums[3]:又一个 -1。这是 -1 的第二次出现,所以 k == 2。seen 中的第二个元素是 1,所以我们把 1 添加到 ans。现在,ans == [2, 1]。
|
||||
5.处理 nums[4]:又一个 -1。第三次出现,让 k = 3。然而,seen 中只有两个元素([2, 1])。因为 k 比 seen 中的元素数量更大,我们把 -1 添加到 ans。最终,ans == [2, 1, -1]。
|
||||
</pre>
|
||||
|
||||
<p><strong class="example">示例 2:</strong></p>
|
||||
|
||||
<pre>
|
||||
<b>输入:</b><code>words</code> = ["1","prev","2","prev","prev"]
|
||||
<b>输入:</b>nums = [1,-1,2,-1,-1]
|
||||
<b>输出:</b>[1,2,1]
|
||||
<strong>解释:</strong>
|
||||
对于下标为 1 处的 "prev" ,上一个遍历的整数是 1 。
|
||||
对于下标为 3 处的 "prev" ,上一个遍历的整数是 2 。
|
||||
对于下标为 4 处的 "prev" ,上一个遍历的整数是 1 ,因为连续 "prev"<strong> </strong>数目为 2 ,同时在数组 reverse_nums 中,第二个元素是 1 。
|
||||
<strong>解释:</strong> 开始时 seen = [] 且 ans = []。
|
||||
1.处理 nums[0]:nums 中的第一个元素是 1。我们将其放在 seen 的前面。现在,seen == [1]。
|
||||
2.处理 nums[1]:下一个元素是 -1。这是 -1 的第一次出现,所以 k == 1。我们找到 seen 中的第一个元素,即 1。把 1 添加到 ans。现在,ans == [1]。
|
||||
3.处理 nums[2]:下一个元素是 2。我们将其放在 seen 的前面。现在,seen == [2, 1]。
|
||||
4.处理 nums[3]:下一个元素是 -1。这个 -1 与 第一个 -1 不连续,因为中间有个 2。因此,k 重置为 1。seen 中的第一个元素是 2,所以我们把 2 添加到 ans。现在,ans == [1, 2]。
|
||||
5.处理 nums[4]:又一个 -1。它与前一个 -1 相邻,所以 k == 2。seen 中的第 2 个元素是 1。把 1 添加到 ans。最终,ans == [1, 2, 1]。
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
@@ -38,6 +49,6 @@
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>1 <= words.length <= 100</code></li>
|
||||
<li><code>words[i] == "prev"</code> 或 <code>1 <= int(words[i]) <= 100</code></li>
|
||||
<li><code>1 <= nums.length <= 100</code></li>
|
||||
<li><code>nums[i] == -1</code> 或 <code>1 <= nums[i] <= 100</code></li>
|
||||
</ul>
|
||||
|
Reference in New Issue
Block a user