最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中單調(diào)棧的基本性質(zhì)介紹

 更新時(shí)間:2021年07月12日 17:33:05   作者:Adherer  
這篇文章主要介紹了單調(diào)棧的基本性質(zhì)介紹,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

單調(diào)棧的定義:

單調(diào)棧就是棧內(nèi)元素單調(diào)遞增或者單調(diào)遞減的棧,單調(diào)棧只能在棧頂操作。

為了更好的理解單調(diào)棧,則可將單調(diào)棧用生活情形模擬實(shí)現(xiàn),例如:

我們借用拿號(hào)排隊(duì)的場(chǎng)景來說明下。現(xiàn)在有很多人在排隊(duì)買可樂,每個(gè)人手里都拿著號(hào),越靠前的人手里的號(hào)越小,

但是號(hào)不一定是連續(xù)的。小明拿了號(hào)后并沒有去排隊(duì),而是跑去約會(huì)了。等他回來后,發(fā)現(xiàn)隊(duì)伍已經(jīng)排得很長(zhǎng)了,

他不能直接插入到隊(duì)伍里,不然人家以為他是來插隊(duì)的。小明只能跑到隊(duì)伍最后,挨個(gè)詢問排隊(duì)人手里的號(hào),

小明認(rèn)為號(hào)比他大的人都是“插隊(duì)”的,于是小明就會(huì)施魔法把這些人變消失,直到小明找到號(hào)比他小的為止。

在上面這個(gè)場(chǎng)景里,大家排的隊(duì)伍就像是單調(diào)棧,因?yàn)榇蠹沂掷锬玫奶?hào)是單調(diào)遞增的。

而小明找自己位置的這個(gè)過程就是元素加入單調(diào)棧的過程。新加入的元素如果加到棧頂后,

如果棧里的元素不再是單調(diào)遞增了,那么我們就刪除加入前的棧頂元素,

就像小明施魔法把“插隊(duì)”的人變消失一樣。直到新元素加入后,棧依然是單調(diào)遞增時(shí),我們才把元素加進(jìn)棧里。

(這樣做的目的是“維護(hù)”單調(diào)棧,是單調(diào)棧保持原來的單調(diào)性不變)

從數(shù)組的角度闡述單調(diào)棧的性質(zhì):

給定一個(gè)包含若干個(gè)整數(shù)的數(shù)組,我們從第 1 個(gè)元素開始依次加入單調(diào)棧里,并且加入后更新單調(diào)棧。

那么單調(diào)棧有這樣的性質(zhì):對(duì)于單調(diào)遞增的棧,如果此時(shí)棧頂元素為 b,加入新元素 a 后進(jìn)行更新時(shí),

如果 a 大于 b,說明 a 在數(shù)組里不能再往左擴(kuò)展了(由于單調(diào)棧的單調(diào)遞增性質(zhì),b前面的元素均小于a),

也就是說,如果從 a 在數(shù)組中的位置開始往左邊遍歷,則 a 一定是第一個(gè)比 b 大的元素;

如果 a 小于 b,說明在數(shù)組里,a 前面至少有一個(gè)元素不能擴(kuò)展到 a 的位置(至少有b元素,因?yàn)閎的值要大于a,如果此時(shí)再加入新的

a,那么單調(diào)棧便不再單調(diào),所以元素a此時(shí)不能壓入棧頂,因?yàn)檫@并不是元素a"應(yīng)該"在的位置,只有當(dāng)元素a找到自己的位置時(shí)

元素a方能壓入棧中,而這樣做的前提是不改變單調(diào)棧的單調(diào)性),也就是對(duì)于這些元素來說,a 是其在數(shù)組右側(cè)第一個(gè)比它小的元素。

單調(diào)棧的維護(hù)是 O(n) 級(jí)的時(shí)間復(fù)雜度,因?yàn)樗性刂粫?huì)進(jìn)入棧一次,并且出棧后再也不會(huì)進(jìn)棧了。

單調(diào)棧的性質(zhì):

1.單調(diào)棧里的元素具有單調(diào)性

2.元素加入棧前,會(huì)在棧頂端把破壞棧單調(diào)性的元素都刪除

3.使用單調(diào)棧可以找到元素向左遍歷第一個(gè)比他小的元素,也可以找到元素向左遍歷第一個(gè)比他大的元素。

對(duì)于第三條性質(zhì)的解釋(最常用的性質(zhì)):

對(duì)于單調(diào)棧的第三條性質(zhì),你可能會(huì)產(chǎn)生疑問,為什么使用單調(diào)??梢哉业皆叵蜃蟊闅v第一個(gè)比他大的元素,

而不是最后一個(gè)比他大的元素呢?我們可以從單調(diào)棧中元素的單調(diào)性來解釋這個(gè)問題,由于單調(diào)棧中的元素只能是單調(diào)遞增或者是單調(diào)

遞減的,所以我們可以分別討論這兩種情況(假設(shè)不存在兩個(gè)相同的元素):

1.當(dāng)單調(diào)棧中的元素是單調(diào)遞增的時(shí)候,根據(jù)上面我們從數(shù)組的角度闡述單調(diào)棧的性質(zhì)的敘述,可以得出:

(1).當(dāng)a > b 時(shí),則將元素a插入棧頂,新的棧頂則為a

(2).當(dāng)a < b 時(shí),則將從當(dāng)前棧頂位置向前查找(邊查找,棧頂元素邊出棧),直到找到第一個(gè)比a小的數(shù),停止查找,將元素a

插入棧頂(在當(dāng)前找到的數(shù)之后,即此時(shí)元素a找到了自己的“位置”)

2.當(dāng)單調(diào)棧中的元素是單調(diào)遞減的時(shí)候,則有:

(1).當(dāng)a < b 時(shí),則將元素a插入棧頂,新的棧頂則為a

(2).當(dāng)a > b 時(shí),則將從當(dāng)前棧頂位置向前查找(邊查找,棧頂元素邊出棧),直到找到第一個(gè)比a大的數(shù),停止查找,將元素a

插入棧頂(在當(dāng)前找到的數(shù)之后,即此時(shí)元素a找到了自己的“位置”)

到此這篇關(guān)于單調(diào)棧的基本性質(zhì)介紹的文章就介紹到這了,更多相關(guān)單調(diào)棧的基本性質(zhì)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++一個(gè)函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)

    C++一個(gè)函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)

    這篇文章主要介紹了C++一個(gè)函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 搭建C語言開發(fā)環(huán)境(Windows平臺(tái))匯總

    搭建C語言開發(fā)環(huán)境(Windows平臺(tái))匯總

    本文給大家匯總了5種在WIN平臺(tái)下搭建C語言開發(fā)環(huán)境的方法,包括一、在Windows平臺(tái)配置GNU環(huán)境,二、使用Sublime Test開發(fā)C語言程序,三、使用VisualStudio開發(fā)C語言程序,四、搭建EclipseCDT集成開發(fā)環(huán)境,五、搭建Clion集成開發(fā)環(huán)境,有需要的小伙伴可以參考下
    2015-11-11
  • C++ static函數(shù)調(diào)用問題小結(jié)

    C++ static函數(shù)調(diào)用問題小結(jié)

    靜態(tài)成員變量是在程序編譯時(shí)分配空間,而在程序結(jié)束時(shí)釋放空間,這篇文章主要介紹了C++ static函數(shù)調(diào)用問題小結(jié),需要的朋友可以參考下
    2024-03-03
  • C/C++?extern關(guān)鍵字用法示例全面解析

    C/C++?extern關(guān)鍵字用法示例全面解析

    這篇文章主要為大家介紹了C/C++?extern關(guān)鍵字用法示例全面解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 十進(jìn)制與BCD碼轉(zhuǎn)換的算法詳解

    十進(jìn)制與BCD碼轉(zhuǎn)換的算法詳解

    BCD轉(zhuǎn)換成十進(jìn)制 BCD碼是指用二進(jìn)制來表示十進(jìn)制數(shù)的編碼,即用4位二進(jìn)制來表示一位十進(jìn)制數(shù),因此4位二進(jìn)制數(shù)表示最大的十進(jìn)制數(shù)9(1001),只取十六個(gè)數(shù)中的十個(gè)數(shù)(有別于8421碼)
    2021-09-09
  • 基于Matlab實(shí)現(xiàn)多目標(biāo)粘液霉菌算法的示例代碼

    基于Matlab實(shí)現(xiàn)多目標(biāo)粘液霉菌算法的示例代碼

    多目標(biāo)粘液霉菌算法(MOSMA),這是最近開發(fā)的粘液霉菌算法(SMA)的多目標(biāo)變體,用于處理工業(yè)中的多目標(biāo)優(yōu)化問題。本文將用Matlab實(shí)現(xiàn)這一算法,需要的可以參考一下
    2022-05-05
  • 使用C++實(shí)現(xiàn)迷宮游戲

    使用C++實(shí)現(xiàn)迷宮游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)迷宮游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++實(shí)現(xiàn)將圖片轉(zhuǎn)換為馬賽克效果的示例代碼

    C++實(shí)現(xiàn)將圖片轉(zhuǎn)換為馬賽克效果的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C++如何實(shí)現(xiàn)將圖片轉(zhuǎn)換為馬賽克效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-01-01
  • VSCode中C/C++編碼亂碼問題的兩種解決方法

    VSCode中C/C++編碼亂碼問題的兩種解決方法

    在中國(guó)地區(qū),Windows 系統(tǒng)中的 cmd 和 PowerShell 默認(rèn)編碼是 GBK,但 VSCode 默認(rèn)使用 UTF-8 編碼,這種編碼不一致會(huì)導(dǎo)致在 VSCode 終端中運(yùn)行 C/C++ 程序時(shí)出現(xiàn)亂碼,以下介紹兩種方法來解決這一問題,需要的朋友可以參考下
    2025-03-03
  • 深度解析C語言中數(shù)據(jù)的存儲(chǔ)

    深度解析C語言中數(shù)據(jù)的存儲(chǔ)

    本文詳細(xì)介紹了C語言中數(shù)據(jù)的存儲(chǔ),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05

最新評(píng)論

平利县| 缙云县| 东辽县| 仙桃市| 西吉县| 石棉县| 黔江区| 靖边县| 辰溪县| 武穴市| 鄂州市| 图们市| 元谋县| 独山县| 黄冈市| 泾阳县| 普安县| 邹城市| 余江县| 和林格尔县| 交城县| 揭阳市| 姚安县| 呼伦贝尔市| 象山县| 共和县| 津南区| 西峡县| 阳山县| 德阳市| 黄大仙区| 龙山县| 台南县| 淄博市| 台江县| 临高县| 新兴县| 东至县| 公安县| 丹阳市| 垦利县|