目錄
實現棧的求最小值函式(劍指歐肥兒)
棧的壓入,彈出序列(劍指歐肥兒)
用兩個棧實現佇列(劍指歐肥兒)
滑動視窗的最大值(劍指歐肥兒)
class solution ;
**思路:
宣告兩個棧,乙個是放所有值的棧(stackin),乙個是頂部放最小值的棧(stackmin)
壓入時,兩個棧都要壓入數,stackin壓入value;而stackmin需要和它棧中top位置的值比較,如果value小於等於stackmin.top()壓入value,如果value大於stackmin.top()則壓入stackmin.top()
彈出時,兩個棧都彈出頂端的數,這樣保證了兩個棧的同步性,保證stackmin的頂部是當前stackin整個棧的最小值。
返回stackin的頂端的值。
返回stackin裡的最小值,即stackmin裡的頂端值。
題目描述:
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)
解題答案:
class solution
stack st //加入乙個輔助棧
int id = 0;
for(int i = 0; i < popv.size(); i++)
st.push(pushv[id++]);
}st.pop();
}if(st.empty())else
}}
**思路:
邊界值判斷,去除不符合條件的輸入向量
依次遍歷輸出棧(popv)的每乙個數,再迴圈判斷popv對應的數是否等於st(輔助棧)頂端的數,如果不等於則繼續壓入pushv的數,如果等於則st彈出這個數。注意迴圈的時候有可能一直沒找到符合條件的數,就會變成死迴圈,故判斷是否變數下標越界,越界直接false(因為這意味著彈出序列包含了壓入序列裡沒有的數)。
最後判斷輔助棧st是否為空,為空則彈出序列正確,否則不正確。
向量vector的大小:vector.size()這道題的思維:取向量vector裡的數:vector[i] //取數類似於陣列
借用乙個輔助的棧,遍歷壓棧順序,先講第乙個放入棧中,這裡是1,然後判斷棧頂元素是不是出棧順序的第乙個元素,這裡是4,很顯然1≠4,所以我們繼續壓棧,直到相等以後開始出棧,出棧乙個元素,則將出棧順序向後移動一位,直到不相等,這樣迴圈等壓棧順序遍歷完成,如果輔助棧還不為空,說明彈出序列不是該棧的彈出順序。
舉例:入棧1,2,3,4,5
出棧4,5,3,2,1
首先1入輔助棧,此時棧頂1≠4,繼續入棧2
此時棧頂2≠4,繼續入棧3
此時棧頂3≠4,繼續入棧4
此時棧頂4=4,出棧4,彈出序列向後一位,此時為5,,輔助棧裡面是1,2,3
此時棧頂3≠5,繼續入棧5
此時棧頂5=5,出棧5,彈出序列向後一位,此時為3,,輔助棧裡面是1,2,3
題目描述:用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
**:
class solution
int pop()
}int a = stack2.top();
stack2.pop();
return a;
}private:
stackstack1;
stackstack2;
}
**思路:
壓棧就壓stack1.
彈出時,首先檢測stack2是不是空的,如果是空的,就把stack1裡從頂到底壓入stack1,再彈出stack2頂部資料;如果stack2不是空的,則直接把stack2的頂部資料彈出。
這樣做的好處,不會每一次壓棧都要重新生成一次stack2(因為生成stack2時間為把stack1全部n個節點壓入,時間為n),只有在stack2全部用完了,才會重新生成stack2。節約時間,而且省空間。
**核心:
if(stack2.empty())
}
題目描述:
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , ,
解題**:
class solution
}max.push_back(m);
}return max;
}};
這道題的思維:
不要引入棧!這道題和棧沒關係!
切入點很重要,切入點正確了,這道題就很簡單了。
棧和佇列B題
題目描述 description 在大學裡學習了乙個學期了,大家大都對所學的專業有了基本的了解。許多同學也已經知道了到大二要開一門課叫做 資料結構 那麼今天給你們提前講一下乙個最簡單的資料結構 棧。棧的基本操作有3種 push,pop,top。例如,給你乙個數列 1 2 3 4 push 向棧中加入...
刷題 棧和佇列
一 因為有太多遺忘的東西了,所以做題速度會很慢 現在理解題目,把題目理解好了,然後去看題解,看完題解,在去搜尋相關知識點進行補充。二 題目 三 理解 棧 先進後出 佇列 先進先出 要滿足題目的要求,我們要把棧底輸出出來,我們可以把棧倒著輸出,就可以滿足佇列的先進先出。所以我們需要兩個棧來,第乙個棧是...
棧和佇列 判斷題
二 判斷題 1.消除遞迴不一定需要使用棧,此說法 2.棧是實現過程和函式等子程式所必需的結構。3.兩個棧共用靜態儲存空間,對頭使用也存在空間溢位問題。4 兩個棧共享一片連續記憶體空間時,為提高記憶體利用率,減少溢位機會,應把兩個棧的棧底分別設在這片記憶體空間的兩端。5.即使對不含相同元素的同一輸入序...