leetcode:2899. 上一个遍历的整数(python3解法)

难度:简单

给你一个整数数组 nums ,其中 nums[i] 要么是一个正整数,要么是 -1 。我们需要为每个 -1 找到相应的正整数,我们称之为最后访问的整数。

为了达到这个目标,定义两个空数组:seenans

从数组 nums 的头部开始遍历。

  • 如果遇到正整数,把它添加到 seen头部
  • 如果遇到 -1,则设 k 是到目前为止看到的 连续 -1 的数目(包括当前 -1),
    • 如果 k 小于等于 seen 的长度,把 seen 的第 k 个元素添加到 ans
    • 如果 k 严格大于 seen 的长度,把 -1 添加到 ans

请你返回数组 ans

示例 1:

复制代码
输入:nums = [1,2,-1,-1,-1]
输出:[2,1,-1]
解释: 开始时 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]。

示例 2:

复制代码
输入:nums = [1,-1,2,-1,-1]
输出:[1,2,1]
解释: 开始时 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]。

提示:

  • 1 <= nums.length <= 100
  • nums[i] == -11 <= nums[i] <= 100

题解:

python 复制代码
class Solution:
    def lastVisitedIntegers(self, nums: List[int]) -> List[int]:
        ans = []
        seen = []
        k = 0  # 记录当前连续的 -1 的数量 
        for i in nums:
            if i != -1:
                seen.insert(0,  i)  # 插入到头部 
                k = 0  # 遇到非 -1,重置连续 -1 计数 
            else:
                k += 1 
                if k <= len(seen):
                    ans.append(seen[k  - 1])  # 第 k 个元素(0-based)
                else:
                    ans.append(-1) 
        
        return ans 
相关推荐
yaoh.wang2 分钟前
力扣(LeetCode) 28: 找出字符串中第一个匹配项的下标 - 解法思
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
flashlight_hi2 分钟前
LeetCode 分类刷题:101. 对称二叉树
javascript·算法·leetcode
yaoh.wang3 分钟前
力扣(LeetCode) 35: 搜索插入位置 - 解法思路
程序人生·算法·leetcode·面试·职场和发展·跳槽·二分搜索
手揽回忆怎么睡6 分钟前
win11灵活控制Python版本,使用pyenv-win
开发语言·python
唯唯qwe-7 分钟前
Day20:贪心算法,跳跃游戏
python·算法·贪心算法
@淡 定8 分钟前
动态代理(JDK动态代理/CGLIB动态代理
java·开发语言·python
laocooon5238578868 分钟前
背包问题~~!C++
开发语言·c++·算法
mit6.8249 分钟前
博弈论nim^|sg函数|涂色dp
算法
破烂pan10 分钟前
Python 整合 Redis 哨兵(Sentinel)与集群(Cluster)实战指南
redis·python·sentinel
CoovallyAIHub17 分钟前
复杂工业场景如何实现3D实例与部件一体化分割?多视角贝叶斯融合的分层图像引导框架
深度学习·算法·计算机视觉