1. 程式人生 > 實用技巧 >【劍指offer】20 包含min函式的棧

【劍指offer】20 包含min函式的棧

題目地址:包含min函式的棧

題目描述

定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式(時間複雜度應為O(1))。

解法分析

一般來說返回最小值需要遍歷整個棧,時間複雜度為O(n),不滿足題目要求的O(1),因此我們需要考慮使用其他方法,加個輔助棧用於存放最小元素,每次有元素進棧就與輔助棧元素作對比。

程式碼

 1 var minStack = [];
 2 var dataStack = [];
 3 function push(node)
 4
{ 5 // write code here 6 dataStack.push(node); 7 if(minStack.length == 0 || node < minStack[minStack.length-1]){ 8 minStack.push(node); 9 }else{ 10 minStack.push(minStack[minStack.length-1]); 11 } 12 } 13 function pop() 14 { 15 // write code here 16 if(minStack.length > 0 && dataStack.length >0){
17 minStack.pop(); 18 dataStack.pop(); 19 } 20 21 } 22 function top() 23 { 24 // write code here 25 if(dataStack.length > 0) return dataStack[dataStack.length-1]; 26 } 27 function min() 28 { 29 // write code here 30 if(dataStack.length > 0 && minStack.length > 0) return
minStack[minStack.length-1]; 31 }

執行結果