• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Zero Lee的專欄

            設計包含min函數的棧

            定義棧的數據結構,要求添加一個min的函數,能夠得到棧的最下元素。
            要求函數min, push, pop的時間復雜度都是O(1)
             1 class stackmin {
             2     int data[N];
             3     int minidx[N];
             4     int top;
             5 public:
             6     stackmin()
             7         : top(-1)
             8     {
             9         ::memset(minidx, -1sizeof(int)*N);
            10         ::memset(data, 0sizeof(int)*N);
            11     }
            12 
            13     bool push(int d)
            14     {
            15         if (top < N-1)
            16             data[++top] = d;
            17         else
            18             return false;
            19         if (top==0)
            20             minidx[top] = 0;
            21         else if (data[minidx[top-1]] > d)
            22             minidx[top] = top;
            23         else
            24             minidx[top] = minidx[top-1];
            25         return true;
            26     }
            27     bool pop(int& d)
            28     {
            29         if (top<0)
            30             return false;
            31         else
            32 
            33             d = data[top];
            34         minidx[top] = -1;
            35         top--;
            36         return true;
            37     }
            38     bool min(int& m)
            39     {
            40         if (top>=0)
            41             m = data[minidx[top]];
            42         else
            43             return false;
            44         return true;
            45     }
            46     void print()
            47     {
            48         for (int i = 0; i <= top; i++)
            49             std::cout << data[i] << " ";
            50         std::cout << "\n";
            51     }
            52 };
            53 

            借助另一個內部的數組,用來存儲每次push元素之后的棧最小值的索引,便可很方便的在O(1)的時間內完成以上三種操作。一種空間換時間的方法。


            posted on 2010-11-26 12:13 Zero Lee 閱讀(801) 評論(0)  編輯 收藏 引用 所屬分類: Data structure and algorithms

            久久成人18免费网站| 久久久亚洲AV波多野结衣 | 精品国产福利久久久| 久久综合久久综合久久综合| 亚洲va久久久噜噜噜久久男同| 国产精品久久久香蕉| 97久久精品国产精品青草| 欧美国产精品久久高清| 国产亚洲精品久久久久秋霞 | 精品乱码久久久久久久| 久久精品亚洲男人的天堂| 人人妻久久人人澡人人爽人人精品 | 成人国内精品久久久久影院VR | 久久精品国产99国产精品澳门| 久久久久综合中文字幕 | 久久综合久久美利坚合众国| 久久美女网站免费| 久久亚洲精品成人AV| 久久无码专区国产精品发布| 久久噜噜电影你懂的| 色婷婷综合久久久久中文一区二区| 久久午夜福利电影| 久久久久97国产精华液好用吗| 久久亚洲精精品中文字幕| 伊人久久大香线蕉亚洲五月天| 亚洲欧洲精品成人久久奇米网| 久久久久久毛片免费看| 97超级碰碰碰碰久久久久| 99久久久精品| 国内精品伊人久久久久| 天堂久久天堂AV色综合| 亚洲国产精品无码久久98| 亚洲AV无码一区东京热久久| 日韩久久无码免费毛片软件| 久久九九久精品国产免费直播| 国产一区二区精品久久凹凸| 久久99精品国产麻豆| 国产一区二区精品久久岳| 欧美色综合久久久久久| 久久久久国色AV免费看图片| 尹人香蕉久久99天天拍|