zoukankan      html  css  js  c++  java
  • Increasing/ Decreasing Stack

    对于此类问题:

    对于元素nums[i],找出往左/右走第一个比它小/大的数字

    我们常常用递增栈/递减栈实现。

    递增栈实现第一个比它小

    递减栈实现第一个比它大

    Example: 2  1  5  6  2  3

    stack: 保证栈是递增的顺序,因此每个数进来之前先删除栈里比它大的数字。

        因此每个数,当它被pop出来时,它在栈里的前一个元素是左边第一个比它小的数,将它pop出来的数是右边第一个比它小的数。

    (1) 2

    (2) 1  (2被1pop出来,2左边第一个比它小的没有,右边第一个比它小的是1)

    (3) 1  5

    (4) 1  5  6

    (5) 1  2    (5, 6 被 2 pop出来。对于5,左边第一个比它小的是1,右边第一个比它小的是2。对于6,左边第一个比它小的是5,右边第一个比它小的是2)

    对于每个元素,因为只进栈出栈一次,所以总体的时间复杂度是O(n)

  • 相关阅读:
    Linux 实战
    bash 环境配置及脚本
    Linux vi/vim
    Linux 正则表达式
    001 KNN分类 最邻近算法
    测序名解
    流式细胞术
    CircRNA 环化RNA
    笔记总结
    Flume
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4907975.html
Copyright © 2011-2022 走看看