国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

微軟算法100題02設計包含min函數的棧

2019-11-14 15:22:04
字體:
來源:轉載
供稿:網友

要求:
1. 定義棧的數據結構,要求添加一個 min函數,能夠得到棧的最小元素
2. 要求函數 min、push 以及 pop 的時間復雜度都是 O(1)

 

思路: 構建一個輔助棧, 只有當前入棧的數據小于該輔助棧的棧頂元素時,才將其push到輔助棧, 保證輔助棧的棧頂元素總為最小,當出棧時,如果出棧元素大于輔助棧棧頂元素,則該元素必然不在輔助棧中,因為輔助棧保留了原始棧的入棧順序(只按大到小存儲 舍棄了一些元素), 該較大元素在入棧時就已經被輔助棧過濾掉了,如果出棧元素小于或等于輔助棧棧頂元素,則輔助棧也進行pop操作

 

 1 package com.rui.microsoft; 2  3 import java.util.Stack; 4  5 public class Test02_MinStack { 6  7     public static void main(String[] args) { 8         MyStack myStack = new MyStack(); 9         myStack.push(5);10         myStack.push(3);11         myStack.push(1);12         myStack.push(6);13         14         System.out.PRintln(myStack.min());15         16         myStack.pop();17         System.out.println(myStack.min());18         19         myStack.pop();20         System.out.println(myStack.min());21         22     }23     24     static class MyStack{25         private Stack<Integer> stack = new Stack<Integer>();26         private Stack<Integer> minStack = new Stack<Integer>();27         28         public void push(int i){29             stack.push(i);30             31             if(minStack.isEmpty()){32                 minStack.push(i);33             }else{34                 int min = minStack.peek();35                 //minStack only push item smaller than its top item36                 //minStack只入棧比其棧頂元素小的元素37                 if(i < min){38                     minStack.push(i);39                 }40             }41         }42         43         public Integer pop(){44             Integer i = stack.pop();45             //when pop an item from original stack46             //we need to process the minStack also47             //if the item popped from original stack is larger than minStack's top item48             //it means this item should not exist in minStack49             if(i <= minStack.peek()){50                 minStack.pop();51             }52             return i;53         }54         55         public Integer min(){56             return minStack.peek();57         }58     }59 }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江陵县| 寿光市| 电白县| 托克托县| 奉化市| 五指山市| 东兰县| 肥西县| 松阳县| 从江县| 林西县| 武川县| 石景山区| 普安县| 福海县| 黑龙江省| 兴宁市| 锡林郭勒盟| 长海县| 肥东县| 秦安县| 胶南市| 平遥县| 眉山市| 翼城县| 河池市| 茂名市| 桦南县| 蕲春县| 永登县| 巴林右旗| 苍山县| 水富县| 武强县| 颍上县| 北宁市| 新兴县| 巨鹿县| 太湖县| 陇西县| 石狮市|