单调栈

作者: madao756 | 来源:发表于2020-03-09 00:17 被阅读0次

由于有四种情况的单调栈,为了不容易出错,我决定全部转换成「求左边第一个比自己小的」单调栈

0X00 模板

求左边第一个比自己小的 模板

def make(a):
    n = len(a)
    ans = [float("inf")] * n
    stack = []
    for i, v in enumerate(a):
        while stack and stack[-1] >= v: stack.pop()
        if stack: ans[i] = stack[-1]
        stack.append(v)
    return ans
  • 如果求左边第一个比自己大的,就把原数组取负
  • 如果求右边第一个比自己小的,就把原数组取反,最后一定要思考是不是要反过来
  • 如果求右边第一个比自己大的,就把原数组取反,再全部取负数,最后也一定要思考是不是要反过来

0X01 引申

求左边比自己大的里面最小的

我们把原数组的下标按照值按降序排序,然后左边第一个下标比自己小的就是「左边比自己大的里面最小的」

975. 奇偶跳

class Solution:
    def oddEvenJumps(self, A: List[int]) -> int:
        def make(a):
            stack, res = [], [None] * n
            for _, v in enumerate(a):
                while stack and stack[-1] > v: stack.pop()
                if stack: res[v] = stack[-1]
                stack.append(v)
            return res
        
        n, A = len(A), A[::-1]
        B = sorted(range(n), key=lambda i: -A[i])
        oddprev = make(B)
        B = sorted(range(n), key=lambda i: A[i])
        evenprev = make(B)
        odd, even = [False] * n, [False] * n
        odd[0] = even[0] = True
        for i in range(1, n):
            if oddprev[i] != None:
                odd[i] = even[oddprev[i]]
            if evenprev[i] != None:
                even[i] = odd[evenprev[i]]

        return sum(odd)

求左边比自己小的最大的

把原数组的下标按升序排序,然后左边第一个下标比自己小的就是「左边比自己小的最大的」

0X02 相关题目

注意判断尽量使用 != None

相关文章

  • 单调栈和应用实践

    什么是单调栈 单调栈的定义:单调栈即满足单调性的栈结构。与单调队列相比,其只在一端进行进出。 如何使用单调栈 单调...

  • 1.单调栈

    一、单调栈定义 单调栈(monotone-stack)是指栈内元素(栈底到栈顶)都是(严格)单调递增或者单调递减的...

  • 单调栈 2020-06-12(未经允许,禁止转载)

    1.单调栈 指栈内元素保持单调性的栈结构,分为单调增栈(栈底到栈顶元素递增)和单调减栈(栈底到栈顶元素递减) 2....

  • LeetCode刷题指北----单调栈

    1.什么是单调栈?有什么好处? 定义: 单调栈就是栈内元素递增或者单调递减的栈,并且只能在栈顶操作。单调栈的维护是...

  • C语言之单调栈

    单调栈 What 单调栈也是栈的一种,满足先进后出的原则,另外,单调栈中的元素是有序的,分为两种 单调递增栈:单调...

  • 腾讯笔试--逛街

    主要的知识点是:单调栈,该题牢牢记得:栈中记录当前楼能看到的元素 单调栈是单调递增栈,栈顶是最小值单调栈存的是能看...

  • 题解——单调栈

    单调栈题解 单调栈结构 牛客链接 方法:单调栈 算法 这里维护一个单调递增栈,可以找到比当前元素要小的元约定:当前...

  • 单调栈

    leetcode - 42. 接雨水单调栈即元素严格单调递增或单调递减的栈,只需要在元素入栈的时候保持栈的单调性即...

  • Java版算法模版总结(2)

    本次233酱介绍下单调栈、单调队列、并查集、KMP算法,欢迎交流指正~ 单调栈 「单调栈」首先是一种基于栈的数据结...

  • 单调栈

    对应力扣题目-739. 每日温度 什么是单调栈? 单调递增栈,从栈底到栈顶依次递增(单调非递减栈:允许有相等) 单...

网友评论

      本文标题:单调栈

      本文链接:https://www.haomeiwen.com/subject/dgasdhtx.html