浅谈单调队列、单调栈

 更新时间:2015年07月06日 12:04:55   投稿:hebedich  
其实,单调队列和单调栈是类似的,在我看来,这两个东西只是名字不一样 - - ! 比较容易想的一道题啦! 首先,这题的两个关键点: 1、区间的和。这个简单,地球人都知道! 2、区间的最小值。

初谈这个话题,相信许多人会有一种似有所悟,但又不敢确定的感觉。没错,这正是因为其中“单调”一词的存在,所谓单调是什么,学过函数的people都知道单调函数或者函数的单调性,直白一点说单调就是一直增或一直减。例如:1,3,5,9就是一个单调增数列,数列中不存在后一个数比前一个数小的现象。那么同样,在这里谈到的话题也有类似特点。

先说一下单调队列吧!      单调队列,就是一个符合单调性质的队列,它同时具有单调的性质以及队列的性质。他在编程中使用频率不高,但却占有至关重要的地位。它的作用很简单,就是为了维护一组单调数据,让我们在运行的过程中能够快速寻求前k个或后k个中最大或最小的值。    至于单调栈,相信看完上面的叙述后,都会有一个大概的理解,单调栈就是一个符合单调性质的栈它同时具有单调的性质以及栈的性质。在作用方面两者是相同的,差别仅是在编程过程中所维护的数组的方式不同。

下面我会举个简单的列子来解释单调队列及单调栈。

例题:有一组数据1,5,9,4,7,8,6,他们会依此输入,同时,在某一时刻会让你求出后n个数中的最大值。                

根据题意,我们可以得出这样一个结论,若后一个数大于前一个数,则结果必定不会是前一个数(比如现在输入了1,5,由于1<5,所以无论是后几个数中的最大值均不会为1),因此,我们只需维护一个单调递减的数组便可快速求得所需之。(数组变化如下:输入——1,数组——1;输入——5,由于5>1删去1添入5,数组——5;输入——9,由于9>5删去5添入9,数组——9;输入——4,由于4<9直接添入,数组——9,4;输入——7,由于7>4同时7<9因此删去4添入7,数组——9,7;输入——8,由于8>4同时8<9因此删去7添入8,数组——9,8;输入——6,由于6<8直接添入,数组——9,8,6。)

单调队列及单调栈的基础也就这些,剩下的就只剩下个人理解及练习了。推荐几道题,在大视野上的1012以及1047,其中1012比较裸适合初学者做,1047略有难度推荐做完1012后再做。(在这里给个提示,1047要用到两次单调队列、单调栈,横着一次再用结果竖这一次。)

以上就是本文的全部内容了,希望对你有所帮助。

相关文章

  • C++内存分布及用法

    C++内存分布及用法

    这篇文章主要介绍了C++内存分布及用法,从内存的基础概念到内存分配进行了讲解,内存是我们开发中最重要的一部分,往往逻辑上的错误就会造成内存泄漏,导致程序无法运行,下面我们就来了解文章对该内容的详细介绍
    2021-12-12
  • C/C++函数调用栈的实现方法

    C/C++函数调用栈的实现方法

    这篇文章主要介绍了C/C++函数调用栈的实现方法,可实现一个简单的脚本解释器,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • C++之值传递&指针传递&引用传递的示例详解

    C++之值传递&指针传递&引用传递的示例详解

    这篇文章主要为大家详细介绍了C++中值传递、指针传递和引用传递的定义与使用,文中的示例代码讲解详细,对我们学习C++有一定帮助,需要的可以参考一下
    2022-10-10
  • C语言详细解析有符号数与无符号数的表示

    C语言详细解析有符号数与无符号数的表示

    我们知道,在C语言中存在无符号数和有符号数,但是对于计算机而言,其本身并不区别有符号数和无符号数,因为在计算机里面都是O或者1,但是在我们的实际使用中有时候需要使用有符号数来表示一个整数,因此我们规定,当最高位为1的时,表示为负数,最高位为0时,表示为正数
    2022-04-04
  • C++ 头文件系列(set)详解

    C++ 头文件系列(set)详解

    一般而言,每个C++/C程序通常由头文件和定义文件组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,而定义文件用于保存程序的实现 。
    2017-02-02
  • C++野指针和悬空指针的实现方法

    C++野指针和悬空指针的实现方法

    野指针和悬空指针是指针中常见的两个概念,本文详细的介绍了这两种的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • C++中using的三种用法举例详解

    C++中using的三种用法举例详解

    最近在使用中,发现了一种以前没学过的using用法,于是在这里,将using的几种用法总结一下,下面这篇文章主要给大家介绍了关于C++中using的三种用法,需要的朋友可以参考下
    2023-02-02
  • C++STL之vector模板类详解

    C++STL之vector模板类详解

    这篇文章主要为大家详细介绍了C++vector模板类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++标准模板库函数sort的那些事儿

    C++标准模板库函数sort的那些事儿

    sort函数是标准模板库的函数,已知开始和结束的地址即可进行排序,可以用于比较任何容器(必须满足随机迭代器),任何元素,任何条件,执行速度一般比qsort要快
    2013-09-09
  • C++实例分析组合数的计算与排列组合的产生

    C++实例分析组合数的计算与排列组合的产生

    这篇文章主要介绍了C++组合数的计算与排列和组合无重集元素的产生,对计算算法感兴趣的同学,可以参考一下,理解其原理,并且试验一下。
    2022-07-07

最新评论