【劍指offer】20 包含min函式的棧
阿新 • • 發佈:2021-01-21
題目地址:包含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) returnminStack[minStack.length-1]; 31 }
執行結果