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

特殊數(shù)據(jù)結構之使用Java實現(xiàn)單調棧示例

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

單調棧

單調棧是一種特殊的數(shù)據(jù)結構,它由棧內元素構成單調遞增或單調遞減的特性。具體來說,對于單調遞增棧,棧內元素從棧底到棧頂單調遞增;對于單調遞減棧,棧內元素從棧底到棧頂單調遞減。

單調棧的應用非常廣泛,包括字符串匹配、路徑尋找、序列比對等場景。

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

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

總之,單調棧是一種非常實用的數(shù)據(jù)結構,它可以廣泛應用于各種場景。

使用Java實現(xiàn)單調棧

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

    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();  
        }  
    }

方法解析

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

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

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

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

以上就是java中特殊數(shù)據(jù)結構單調棧使用場景示例詳解的詳細內容,更多關于java單調棧數(shù)據(jù)結構的資料請關注腳本之家其它相關文章!

相關文章

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

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

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

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

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

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

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

    springboot解決前后端分離時的跨域問題

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

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

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

    Spring中的三級緩存使用及說明

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

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

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

    java中流的使用

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

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

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

    springboot與vue實現(xiàn)簡單的CURD過程詳析

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

最新評論

大安市| 神池县| 晴隆县| 庄河市| 万盛区| 洞口县| 武邑县| 鹰潭市| 西充县| 尉犁县| 常熟市| 沙洋县| 水城县| 安平县| 松原市| 涡阳县| 濮阳市| 饶平县| 长治县| 临安市| 乾安县| 吴江市| 西乌珠穆沁旗| 清远市| 琼结县| 达孜县| 平定县| 基隆市| 竹北市| 南投市| 楚雄市| 郁南县| 北安市| 门头沟区| 甘南县| 新和县| 昌江| 民乐县| 桓仁| 马尔康县| 新密市|