国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

我的面試準(zhǔn)備過(guò)程--隊(duì)列與棧(更新中)

EastWoodYang / 838人閱讀

摘要:和三個(gè)方法的時(shí)間復(fù)雜度必須為兩種解法,解法一,將最小值存入自有的數(shù)據(jù)結(jié)構(gòu)中,如下所示原本的值最小值解法二,用兩個(gè)棧

堆棧和隊(duì)列統(tǒng)稱(chēng)線(xiàn)性表

簡(jiǎn)單的線(xiàn)性結(jié)構(gòu)

數(shù)組和鏈表可以實(shí)現(xiàn)這兩種數(shù)據(jù)結(jié)構(gòu)

堆棧

基本理解

DFS

深度優(yōu)先---按深度遍歷

遞歸轉(zhuǎn)非遞歸

隊(duì)列

基本理解

BFS

廣度優(yōu)先---按層序遍歷

出入棧的合法性
模擬出入棧的過(guò)程,不是入棧,就是出棧,不然就不合法

public boolean isPossible(int[] in, int[] out){
    if(in.length != out.length){
        return false;
    }
    
    Stack s = new Stack<>();
    for(int i = 0, j = 0;j < out.length; j++){
        //如果不是入棧的
        while(s.isEmpty() && s.peek() != out[j]){
            if(i >= in.length){
                return false;
            }
            s.push(in[i++]);
        }
        //那就出棧
        s.pop();
    }
    
    return true;
}

兩個(gè)棧實(shí)現(xiàn)隊(duì)列

    public class MyQueue{
        Stack s1 = new Stack<>();
        Stack s2 = new Stack<>();

        public void push(int x){
            s1.push(x);
        }

        //負(fù)負(fù)得正
        public int pop(){
            if(s2.isEmpty()){
                while(!s1.isEmpty()){
                    s2.push(s1.pop());
                }
            }
            return s2.pop();
        }

        public int peek(){
            if(s2.isEmpty()){
                while(!s1.isEmpty()){
                    s2.push(s1.pop());
                }
            }
            return s2.peek();
        }

        public boolean empty(){
            return s1.isEmpty() && s2.isEmpty();
        }

    } 

兩個(gè)隊(duì)列實(shí)現(xiàn)棧

public class MyStack {
    Queue queue1;
    Queue queue2;
    /** Initialize your data structure here. */
    public MyStack() {
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }
    
    /** Push element x onto stack. */
    public void push(int x) {
        if(!queue1.isEmpty()){
            queue1.offer(x);
        }else{
            queue2.offer(x);
        }
    }
    
    /** Removes the element on top of the stack and returns that element. */
    public int pop() {
        if(queue1.size() != 0){
            while(queue1.size() > 1){
                queue2.add(queue1.peek());
                queue1.poll();
            }
            return queue1.remove();
        }else{
            while(queue2.size() > 1){
                queue1.add(queue2.peek());
                queue2.poll();
            }
            return queue2.remove();
        }
    }
    
    /** Get the top element. */
    public int top() {
        if(queue1.size() != 0){
            while(queue1.size() > 1){
                queue2.add(queue1.poll());
            }
            int res = queue1.peek();
            queue2.add(queue1.poll());
            return res;
        }else{
            while(queue2.size() > 1){
                queue1.add(queue2.poll());
            }
            int res = queue2.peek();
            queue1.add(queue2.poll());
            return res;
        }
    }
    
    /** Returns whether the stack is empty. */
    public boolean empty() {
        return queue1.isEmpty() && queue2.isEmpty();
    }
}

設(shè)計(jì)一個(gè)棧,除pop與push方法,還支持min方法,可返回棧元素中的最小值。push、pop和min三個(gè)方法的時(shí)間復(fù)雜度必須為O(1)

兩種解法,解法一,將最小值存入自有的數(shù)據(jù)結(jié)構(gòu)中,如下所示

public class MyStack extends Stack{
    
    public void push(int value){
        int newMin = Math.min(value, min());
        super.push(new NodeWithMin(value, newMin));
    }
    
    public int min(){
        if(this.isEmpty()){
            return Integer.MAX_VALUE;
        }else{
            return peek().min;
        }
    }
    
    public int pop(){
        super.pop().value;
    }
}

class NodeWithMin{
    int value;//原本的值
    int min;//最小值
    public NodeWithMin(int value, int min){
        this.value = value;
        this.min = min;
    }
}

解法二,用兩個(gè)棧

public class MyStack{
        Stack s1 = new Stack<>();
        Stack s2 = new Stack<>();

        public void push(int i){
                s1.push(i);
                if(s2.isEmpty() || min() >= i){
                        s2.push(i);
                }
        }

        public int pop(){
                if(s1.peek() == min()){
                        s2.pop();
                }

                return s1.pop();
        }

        public int min(){
                return s2.peek();
        }

}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/70161.html

相關(guān)文章

  • V8 的 Error 對(duì)象與棧追蹤的妙用

    摘要:現(xiàn)狀最近在寫(xiě)歡迎的時(shí)候,一直為錯(cuò)誤的棧追蹤而愁。由于送入隊(duì)列的是函數(shù),因此在的參數(shù)可以放心地使用。其次,這些函數(shù)并不是立即在中調(diào)用的,而是由專(zhuān)門(mén)的隊(duì)列處理代碼來(lái)調(diào)用。 本文的講述都是以 Node.js 環(huán)境為例子,而 Node.js 使用的 JavaScript 引擎是 V8,因此理論上 Chrome 也能適用,其它瀏覽器我就不清楚了。 現(xiàn)狀 最近在寫(xiě) Rize(歡迎 star) 的時(shí)...

    Luosunce 評(píng)論0 收藏0
  • 我的面試準(zhǔn)備過(guò)程--多線(xiàn)程(更新)

    摘要:但是,實(shí)際中無(wú)法保證達(dá)到讓步目的,因?yàn)樽尣降木€(xiàn)程還有可能被線(xiàn)程調(diào)度程序再次選中。在大多數(shù)情況下,將導(dǎo)致線(xiàn)程從運(yùn)行狀態(tài)轉(zhuǎn)到可運(yùn)行狀態(tài),但有可能沒(méi)有效果。 多線(xiàn)程編程 線(xiàn)程狀態(tài)圖 總是無(wú)法上傳,稍后上傳 常用函數(shù) 狀態(tài)轉(zhuǎn)換 運(yùn)行中->阻塞 sleep(long millis) 在指定的毫秒數(shù)內(nèi)讓當(dāng)前正在執(zhí)行的線(xiàn)程休眠 join() 等待t線(xiàn)程終止 使用方式 Thread t =...

    zoomdong 評(píng)論0 收藏0
  • 螞蟻金服實(shí)習(xí)生面經(jīng)總結(jié)(已拿口頭offer)

    摘要:我自己總結(jié)的學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問(wèn)題,已經(jīng)開(kāi)源,目前已經(jīng)。面試官那你都了解里面的哪些東西呢我哈哈哈這可是我的強(qiáng)項(xiàng),從,說(shuō)到,,又說(shuō)到線(xiàn)程池,分別說(shuō)了底層實(shí)現(xiàn)和項(xiàng)目中的應(yīng)用。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問(wèn)題,已經(jīng)開(kāi)源,目前已經(jīng) 35k+ Star。會(huì)一直完善下去,歡迎建議和指導(dǎo),同時(shí)也歡迎Star: https://github.com/Snailclimb... ...

    Lemon_95 評(píng)論0 收藏0
  • 一個(gè) 16年畢業(yè)生所經(jīng)歷的 PHP 面試

    摘要:正確做法是給加索引,還有聯(lián)合索引,并不能避免全表掃描。 前言:有收獲的話(huà)請(qǐng)加顆小星星,沒(méi)有收獲的話(huà)可以 反對(duì) 沒(méi)有幫助 舉報(bào)三連 有心的同學(xué)應(yīng)該會(huì)看到我這個(gè)noteBook下面的其它知識(shí),希望對(duì)你們有些許幫助。 本文地址 時(shí)間點(diǎn):2017-11 一個(gè)16年畢業(yè)生所經(jīng)歷的php面試 一、什么是面試 二、面試準(zhǔn)備 1. 問(wèn):什么時(shí)候開(kāi)始準(zhǔn)備? 2. 問(wèn):怎么準(zhǔn)備? 三、面試...

    dabai 評(píng)論0 收藏0
  • 【譯】JavaScript數(shù)據(jù)結(jié)構(gòu)(2):棧與隊(duì)列

    摘要:棧和隊(duì)列是開(kāi)發(fā)中最常用的兩種數(shù)據(jù)結(jié)構(gòu)。如果又有數(shù)據(jù)入棧,的值將增加到。如果一個(gè)數(shù)據(jù)從棧中被取出,的值將會(huì)減少為。隊(duì)列與棧類(lèi)似,隊(duì)列也是一個(gè)線(xiàn)性數(shù)據(jù)結(jié)構(gòu)。與棧不同的是,隊(duì)列只刪除最先添加的數(shù)據(jù)。現(xiàn)在,讓我們將棧大小的實(shí)現(xiàn)應(yīng)用到隊(duì)列中。 翻譯:瘋狂的技術(shù)宅英文:https://code.tutsplus.com/art...說(shuō)明:本文翻譯自系列文章《Data Structures With...

    zlyBear 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<