<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 241,  comments - 116,  trackbacks - 0
    題目:定義棧的數據結構,要求添加一個min函數,能夠得到棧的最小元素。要求函數min、push以及pop的時間復雜度都是O(1)。 實現思路:們需要一個輔助棧。每次push一個新元素的時候,同時將最小元素(或最小元素的位置。考慮到棧元素的類型可能是復雜的數據結構,用最小元素的位置將能減少空間消耗)push到輔助棧中;每次pop一個元素出棧的時候,同時pop輔助棧。
    package stack;

    import java.util.ArrayList;

    /**
     * 實現包含min函數的棧
     * @author DHC
     * @param <T>
     */
    public class MinInStack<T> {

        public static void main(String[] args) {
            MinInStack<Integer> newStack = new MinInStack<Integer>();
            newStack.push(4);
            newStack.push(6);
            newStack.push(2);
            newStack.push(5);
            newStack.pop();
            newStack.pop();
            newStack.push(1);
            System.out.println(newStack.min());
        }
        
        public ArrayList<T> stack = new ArrayList<T>();
        
        public ArrayList<Integer> minStack = new ArrayList<Integer>();
        
        public T pop() {
            int size = stack.size();
            minStack.remove(size - 1);
            return stack.remove(size - 1);
        }
        
        public void push(T item) {
            int size = stack.size();
            
            if (size == 0) {
                minStack.add(0);
            } else {
                int minPosition = minStack.get(size - 1);
                T minData = stack.get(minPosition);
                
                if (compare(minData, item)) {
                    minStack.add(stack.size());
                } else {
                    minStack.add(minPosition);
                }
            }
            
            stack.add(item);
        }
        
        public T peek() {
            int size = stack.size();
            return stack.get(size - 1);
        }
        
        public T min() {
            int size = minStack.size();
            return stack.get(minStack.get(size - 1));
        }
        
        public boolean isEmpty() {
            return stack.isEmpty();
        }

        /**
         * 泛型元素的比較方法
         * @param minData
         * @param item
         * @return true 代表當前元素小于之前的最小元素
         */
        private boolean compare(T minData, T item) {
            // 這兒不同的泛型類型可以用不同的方式實現
            // 如果寫成通用代碼泛型之間應該腫么比較大小呢?是不是可以讓泛型都繼承某一接口呢?
            int a = (Integer) minData;
            int b = (Integer) item;
            if(a > b) {
                return true;
            } else {
                return false;
            }
        }
    }
    posted on 2012-01-31 15:57 墻頭草 閱讀(1060) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 亚洲爱情岛论坛永久| 免费大黄网站在线看| 国产免费久久久久久无码| 妞干网在线免费观看| 亚洲中文字幕无码爆乳app| 免费阿v网站在线观看g| 亚洲不卡视频在线观看| 好爽又高潮了毛片免费下载| 亚洲色成人网站WWW永久四虎| 一二三四在线播放免费观看中文版视频 | 成年女人A毛片免费视频| 伊人婷婷综合缴情亚洲五月| 三级黄色在线免费观看| 亚洲av日韩av不卡在线观看| 91成人在线免费观看| 亚洲人成人77777网站不卡| 久久久久久久久免费看无码| 亚洲欧美成人综合久久久| 免费一级特黄特色大片在线观看 | 18禁超污无遮挡无码免费网站| 亚洲乱亚洲乱淫久久| 成人片黄网站A毛片免费| 亚洲国产美女精品久久久| 亚洲成?v人片天堂网无码| 国产一级在线免费观看| 911精品国产亚洲日本美国韩国| 国产成人免费高清激情明星 | 国产成人精品日本亚洲18图| 午夜神器成在线人成在线人免费| 老司机午夜在线视频免费观| 亚洲国产精品一区二区第一页| 免费观看无遮挡www的视频 | 最新国产乱人伦偷精品免费网站 | 成人毛片视频免费网站观看| 免费亚洲视频在线观看| 97人妻无码一区二区精品免费| 亚洲一卡2卡3卡4卡5卡6卡| 久久久久亚洲精品男人的天堂| 91在线手机精品免费观看| 亚洲欧洲国产综合AV无码久久| 亚洲精品国产精品国自产观看|