摘要:和三個方法的時間復(fù)雜度必須為兩種解法,解法一,將最小值存入自有的數(shù)據(jù)結(jié)構(gòu)中,如下所示原本的值最小值解法二,用兩個棧
堆棧和隊列統(tǒng)稱線性表
簡單的線性結(jié)構(gòu)
數(shù)組和鏈表可以實現(xiàn)這兩種數(shù)據(jù)結(jié)構(gòu)
堆棧
基本理解
DFS
深度優(yōu)先---按深度遍歷
遞歸轉(zhuǎn)非遞歸
隊列
基本理解
BFS
廣度優(yōu)先---按層序遍歷
出入棧的合法性
模擬出入棧的過程,不是入棧,就是出棧,不然就不合法
public boolean isPossible(int[] in, int[] out){ if(in.length != out.length){ return false; } Stacks = 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; }
兩個棧實現(xiàn)隊列
public class MyQueue{ Stacks1 = 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(); } }
兩個隊列實現(xiàn)棧
public class MyStack { Queuequeue1; 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è)計一個棧,除pop與push方法,還支持min方法,可返回棧元素中的最小值。push、pop和min三個方法的時間復(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; } }
解法二,用兩個棧
public class MyStack{ Stacks1 = 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70161.html
摘要:現(xiàn)狀最近在寫歡迎的時候,一直為錯誤的棧追蹤而愁。由于送入隊列的是函數(shù),因此在的參數(shù)可以放心地使用。其次,這些函數(shù)并不是立即在中調(diào)用的,而是由專門的隊列處理代碼來調(diào)用。 本文的講述都是以 Node.js 環(huán)境為例子,而 Node.js 使用的 JavaScript 引擎是 V8,因此理論上 Chrome 也能適用,其它瀏覽器我就不清楚了。 現(xiàn)狀 最近在寫 Rize(歡迎 star) 的時...
摘要:但是,實際中無法保證達(dá)到讓步目的,因為讓步的線程還有可能被線程調(diào)度程序再次選中。在大多數(shù)情況下,將導(dǎo)致線程從運行狀態(tài)轉(zhuǎn)到可運行狀態(tài),但有可能沒有效果。 多線程編程 線程狀態(tài)圖 總是無法上傳,稍后上傳 常用函數(shù) 狀態(tài)轉(zhuǎn)換 運行中->阻塞 sleep(long millis) 在指定的毫秒數(shù)內(nèi)讓當(dāng)前正在執(zhí)行的線程休眠 join() 等待t線程終止 使用方式 Thread t =...
摘要:我自己總結(jié)的學(xué)習(xí)的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng)。面試官那你都了解里面的哪些東西呢我哈哈哈這可是我的強項,從,說到,,又說到線程池,分別說了底層實現(xiàn)和項目中的應(yīng)用。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng) 35k+ Star。會一直完善下去,歡迎建議和指導(dǎo),同時也歡迎Star: https://github.com/Snailclimb... ...
摘要:正確做法是給加索引,還有聯(lián)合索引,并不能避免全表掃描。 前言:有收獲的話請加顆小星星,沒有收獲的話可以 反對 沒有幫助 舉報三連 有心的同學(xué)應(yīng)該會看到我這個noteBook下面的其它知識,希望對你們有些許幫助。 本文地址 時間點:2017-11 一個16年畢業(yè)生所經(jīng)歷的php面試 一、什么是面試 二、面試準(zhǔn)備 1. 問:什么時候開始準(zhǔn)備? 2. 問:怎么準(zhǔn)備? 三、面試...
摘要:棧和隊列是開發(fā)中最常用的兩種數(shù)據(jù)結(jié)構(gòu)。如果又有數(shù)據(jù)入棧,的值將增加到。如果一個數(shù)據(jù)從棧中被取出,的值將會減少為。隊列與棧類似,隊列也是一個線性數(shù)據(jù)結(jié)構(gòu)。與棧不同的是,隊列只刪除最先添加的數(shù)據(jù)。現(xiàn)在,讓我們將棧大小的實現(xiàn)應(yīng)用到隊列中。 翻譯:瘋狂的技術(shù)宅英文:https://code.tutsplus.com/art...說明:本文翻譯自系列文章《Data Structures With...
閱讀 3656·2021-10-09 09:58
閱讀 1199·2021-09-22 15:20
閱讀 2501·2019-08-30 15:54
閱讀 3516·2019-08-30 14:08
閱讀 892·2019-08-30 13:06
閱讀 1823·2019-08-26 12:16
閱讀 2685·2019-08-26 12:11
閱讀 2515·2019-08-26 10:38