zoukankan      html  css  js  c++  java
  • 力扣496题、503题(单调栈)

    496.下一个最大元素I

    基本思想:

    先对num1中每一个元素他的下一个最大元素对应的写成个字典,

    再将num2中每一个元素在字典中找到对应的value放到一个列表中

    具体实现:

    stack是栈

    stack[-1]是列表中最后一个元素

    stack.pop()弹出的是最后一个元素--------出栈

    stack.append()在列表末尾加入一个元素--------入栈

    代码:

    class Solution:
        def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
            # time O(n), space O(n)
            
            stack = []
            book = {}
            for i in range(len(nums2)):
                while stack and stack[-1] < nums2[i]:
                    book[stack.pop()] = nums2[i]
                stack.append(nums2[i])
            
            res = []
            
            for n in nums1:
                if n in book:
                    res.append(book[n])
                else:
                    res.append(-1)
            
            return res

    503、下一个最大元素II

    基本思想:

    将原来的数组复制成双倍大小

    具体实现:

    i是用来计数的

    stack这个栈里存放的是nums中每个元素的下标,不是每个元素

    因为要根据下标来修改结果数组res

     

    代码:

    class Solution(object):
        def nextGreaterElements(self, nums):
            """
            :type nums: List[int]
            :rtype: List[int]
            """
            N = len(nums)
            res = [-1] * N
            stack = []
            for i in range(N * 2):
                while stack and nums[stack[-1]] < nums[i % N]:
                    res[stack.pop()] = nums[i % N]
                stack.append(i % N)
            return res
  • 相关阅读:
    pytest框架运用
    unitTest学习
    发送邮件
    python 连接远程服务器,修改时间
    Redis基础
    django 知识点扩展
    ACM 题目 1487: [蓝桥杯][算法提高VIP]不同单词个数统计
    Leetcode 面试题 08.01. 三步问题
    Leetocode 198. 打家劫舍
    Leetcode 121. 买卖股票的最佳时机
  • 原文地址:https://www.cnblogs.com/zhaojiayu/p/14491850.html
Copyright © 2011-2022 走看看