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

特殊數(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)文章

  • SpringBoot統(tǒng)一功能處理實(shí)現(xiàn)的全過(guò)程

    SpringBoot統(tǒng)一功能處理實(shí)現(xiàn)的全過(guò)程

    最近在做項(xiàng)目時(shí)需要對(duì)異常進(jìn)行全局統(tǒng)一處理,主要是一些分類入庫(kù)以及記錄日志等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot統(tǒng)一功能處理實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • springboot引用kettle實(shí)現(xiàn)對(duì)接oracle數(shù)據(jù)的示例代碼

    springboot引用kettle實(shí)現(xiàn)對(duì)接oracle數(shù)據(jù)的示例代碼

    這篇文章主要介紹了springboot引用kettle實(shí)現(xiàn)對(duì)接oracle數(shù)據(jù),其實(shí)kettle集成到springboot里面沒(méi)有多少代碼,這個(gè)功能最主要的還是ktr文件的編寫(xiě),只要ktr編寫(xiě)好了,放到指定文件夾下,寫(xiě)個(gè)定時(shí)任務(wù)就完事了,需要的朋友可以參考下
    2022-12-12
  • 淺談@Aspect@Order各個(gè)通知的執(zhí)行順序

    淺談@Aspect@Order各個(gè)通知的執(zhí)行順序

    這篇文章主要介紹了@Aspect@Order各個(gè)通知的執(zhí)行順序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • springboot解決前后端分離時(shí)的跨域問(wèn)題

    springboot解決前后端分離時(shí)的跨域問(wèn)題

    這篇文章主要介紹了springboot如何解決前后端分離時(shí)的跨域問(wèn)題,幫助大家更好的理解和學(xué)習(xí)使用springboot,感興趣的朋友可以了解下
    2021-04-04
  • Spring5新功能日志框架Log4j2整合示例

    Spring5新功能日志框架Log4j2整合示例

    這篇文章主要為大家介紹了Spring5新功能之日志框架Log4j2的整合示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Spring中的三級(jí)緩存使用及說(shuō)明

    Spring中的三級(jí)緩存使用及說(shuō)明

    文章介紹了Spring框架中循環(huán)依賴的問(wèn)題,包括循環(huán)依賴的定義、常見(jiàn)場(chǎng)景和解決方法,構(gòu)造器注入的循環(huán)依賴無(wú)法解決,而field屬性注入(setter方法注入)循環(huán)依賴可以解決,Spring通過(guò)“三級(jí)緩存”機(jī)制來(lái)解決循環(huán)依賴問(wèn)題,其中singletonFactories是關(guān)鍵
    2025-11-11
  • 4個(gè)Java8中你需要知道的函數(shù)式接口分享

    4個(gè)Java8中你需要知道的函數(shù)式接口分享

    Java?8?中提供了許多函數(shù)式接口,包括Function、Consumer、Supplier、Predicate?等等。本文主要來(lái)和大家介紹一下它們的具體使用,需要的可以參考一下
    2023-04-04
  • java中流的使用

    java中流的使用

    本文主要介紹了java中流的使用以及分類。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • 一文詳解Java線程安全的集合有哪些

    一文詳解Java線程安全的集合有哪些

    在Java中線程安全的集合類對(duì)于多線程編程至關(guān)重要,它們能夠確保在多個(gè)線程同時(shí)訪問(wèn)集合時(shí)數(shù)據(jù)的一致性和完整性,下面這篇文章主要介紹了Java線程安全集合有哪些的相關(guān)資料,需要的朋友可以參考下
    2025-06-06
  • springboot與vue實(shí)現(xiàn)簡(jiǎn)單的CURD過(guò)程詳析

    springboot與vue實(shí)現(xiàn)簡(jiǎn)單的CURD過(guò)程詳析

    這篇文章主要介紹了springboot與vue實(shí)現(xiàn)簡(jiǎn)單的CURD過(guò)程詳析,圍繞springboot與vue的相關(guān)資料展開(kāi)實(shí)現(xiàn)CURD過(guò)程的過(guò)程介紹,需要的小伙伴可以參考一下
    2022-01-01

最新評(píng)論

唐海县| 临桂县| 邮箱| 太保市| 东兴市| 连城县| 鄂托克前旗| 旅游| 昌黎县| 满城县| 曲沃县| 收藏| 呼伦贝尔市| 吉水县| 庆元县| 泊头市| 沾益县| 增城市| 个旧市| 得荣县| 泉州市| 永州市| 鄂州市| 阜南县| 呼图壁县| 弥勒县| 勃利县| 渑池县| 汤原县| 韶关市| 峨山| 牡丹江市| 新龙县| 河东区| 长海县| 吉安县| 阳新县| 西昌市| 龙州县| 丰顺县| 万源市|