亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

特殊數(shù)據(jù)結(jié)構(gòu)之使用Java實(shí)現(xiàn)單調(diào)棧示例

 更新時(shí)間:2023年09月04日 09:49:47   作者:阿芯愛(ài)編程  
這篇文章主要為大家介紹了特殊數(shù)據(jù)結(jié)構(gòu)之使用Java實(shí)現(xiàn)單調(diào)棧示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

單調(diào)棧

單調(diào)棧是一種特殊的數(shù)據(jù)結(jié)構(gòu),它由棧內(nèi)元素構(gòu)成單調(diào)遞增或單調(diào)遞減的特性。具體來(lái)說(shuō),對(duì)于單調(diào)遞增棧,棧內(nèi)元素從棧底到棧頂單調(diào)遞增;對(duì)于單調(diào)遞減棧,棧內(nèi)元素從棧底到棧頂單調(diào)遞減。

單調(diào)棧的應(yīng)用非常廣泛,包括字符串匹配、路徑尋找、序列比對(duì)等場(chǎng)景。

例如,在字符串匹配中,我們可以使用單調(diào)棧來(lái)優(yōu)化暴力匹配算法。具體來(lái)說(shuō),我們使用單調(diào)遞減棧存儲(chǔ)文本串中尚未匹配的字符,保證棧底是文本串中最早出現(xiàn)的尚未匹配的字符。然后,對(duì)于模式串中的每個(gè)字符,我們依次與棧頂元素進(jìn)行匹配。如果匹配成功,則將該字符壓入棧中;如果匹配失敗,則將棧頂元素彈出,相當(dāng)于將該字符“忽略”。通過(guò)這種方式,我們可以快速找到模式串在文本串中的所有出現(xiàn)位置。

除了字符串匹配,單調(diào)棧還可以應(yīng)用于其他場(chǎng)景。例如,在路徑尋找問(wèn)題中,我們可以使用單調(diào)遞增棧來(lái)存儲(chǔ)每個(gè)節(jié)點(diǎn)的后繼節(jié)點(diǎn)。具體來(lái)說(shuō),我們將當(dāng)前節(jié)點(diǎn)的后繼節(jié)點(diǎn)依次壓入棧中,并保證棧內(nèi)元素按照到達(dá)當(dāng)前節(jié)點(diǎn)的距離進(jìn)行排序。然后,對(duì)于每個(gè)新到達(dá)的節(jié)點(diǎn),我們可以從棧頂找到距離該節(jié)點(diǎn)最近的祖先節(jié)點(diǎn),并以此為起點(diǎn)繼續(xù)搜索。通過(guò)這種方式,我們可以快速找到從起點(diǎn)到終點(diǎn)的最短路徑。

總之,單調(diào)棧是一種非常實(shí)用的數(shù)據(jù)結(jié)構(gòu),它可以廣泛應(yīng)用于各種場(chǎng)景。

使用Java實(shí)現(xiàn)單調(diào)棧

單調(diào)棧是一種特殊的數(shù)據(jù)結(jié)構(gòu),用于解決一些特定的問(wèn)題。以下是使用Java實(shí)現(xiàn)單調(diào)棧的示例代碼:

    import java.util.ArrayList;  
    import java.util.Stack;  
    public class MonotonicStack {  
        private Stack<Integer> stack;  
        private Stack<Integer> maxStack;  
        public MonotonicStack() {  
            stack = new Stack<>();  
            maxStack = new Stack<>();  
        }  
        public void push(int val) {  
            if (val >= stack.peek()) {  
                stack.push(val);  
            } else {  
                while (!maxStack.isEmpty() && val > maxStack.peek()) {  
                    maxStack.pop();  
                }  
                stack.push(val);  
                maxStack.push(val);  
            }  
        }  
        public int pop() {  
            if (!stack.isEmpty()) {  
                return stack.pop();  
            } else {  
                return -1;  
            }  
        }  
        public int top() {  
            if (!stack.isEmpty()) {  
                return stack.peek();  
            } else {  
                return -1;  
            }  
        }  
        public boolean isEmpty() {  
            return stack.isEmpty();  
        }  
    }

方法解析

在上面的代碼中,我們使用了兩個(gè)棧,stack 用于存儲(chǔ)普通元素,maxStack 用于存儲(chǔ)最大元素。

在 push() 方法中,我們首先判斷要插入的元素是否大于等于棧頂元素,如果是,則直接將其壓入 stack 中;否則,我們將從 maxStack 中彈出比當(dāng)前元素小的元素,直到找到一個(gè)比當(dāng)前元素大的元素或 maxStack 為空。然后將當(dāng)前元素壓入 stack 中,并壓入 maxStack 中。

在 pop() 和 top() 方法中,我們直接從 stack 中彈出或返回棧頂元素。

在 isEmpty() 方法中,我們判斷 stack 是否為空。

以上就是java中特殊數(shù)據(jù)結(jié)構(gòu)單調(diào)棧使用場(chǎng)景示例詳解的詳細(xì)內(nèi)容,更多關(guān)于java單調(diào)棧數(shù)據(jù)結(jié)構(gòu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IDEA+Maven打JAR包的兩種方法步驟詳解

    IDEA+Maven打JAR包的兩種方法步驟詳解

    Idea中為一般的非Web項(xiàng)目打Jar包是有自己的方法的,下面這篇文章主要給大家介紹了關(guān)于IDEA+Maven打JAR包的兩種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • java數(shù)據(jù)結(jié)構(gòu)算法稀疏數(shù)組示例詳解

    java數(shù)據(jù)結(jié)構(gòu)算法稀疏數(shù)組示例詳解

    這篇文章主要為大家介紹了java數(shù)據(jù)結(jié)構(gòu)算法稀疏數(shù)組示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • JavaMail郵件發(fā)送機(jī)制詳解

    JavaMail郵件發(fā)送機(jī)制詳解

    這篇文章主要介紹了JavaMail郵件發(fā)送機(jī)制詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java編程中的HashSet和BitSet詳解

    Java編程中的HashSet和BitSet詳解

    這篇文章主要介紹了Java編程中的HashSet和BitSet詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 如何根據(jù)帶賬號(hào)密碼的WSDL地址生成JAVA代碼

    如何根據(jù)帶賬號(hào)密碼的WSDL地址生成JAVA代碼

    這篇文章主要介紹了如何根據(jù)帶賬號(hào)密碼的WSDL地址生成JAVA代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java后端學(xué)習(xí)精華之TCP通信傳輸協(xié)議詳解

    Java后端學(xué)習(xí)精華之TCP通信傳輸協(xié)議詳解

    TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會(huì)保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission Control Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層
    2021-09-09
  • Java?中的?clone(?)?和?new哪個(gè)效率更高

    Java?中的?clone(?)?和?new哪個(gè)效率更高

    很多朋友不太清楚clone()和new那個(gè)更快?針對(duì)這個(gè)問(wèn)題我百度了好多資料,最終小編總結(jié)下關(guān)于Java?中的?clone(?)?和?new哪個(gè)效率更高的問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • ruoyi微服務(wù)版本搭建運(yùn)行方式

    ruoyi微服務(wù)版本搭建運(yùn)行方式

    這篇文章主要介紹了ruoyi微服務(wù)版本搭建運(yùn)行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MyBatis?handleResultSet結(jié)果集解析過(guò)程示例

    MyBatis?handleResultSet結(jié)果集解析過(guò)程示例

    這篇文章主要為大家介紹了MyBatis?handleResultSet結(jié)果集解析過(guò)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 解決找不到符號(hào) 符號(hào):變量 log問(wèn)題

    解決找不到符號(hào) 符號(hào):變量 log問(wèn)題

    這篇文章主要介紹了解決找不到符號(hào) 符號(hào): 變量 log問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論