1,設計一個棧結構,滿足一下條件:min,push,pop操作的時間複雜度爲O(1)
技巧型,設置一個輔助棧,push的時候,把當前最小值壓棧.
2,一串首尾相連的珠子(m個),有N種顏色(N<=10),設計一個算法,取出其中一段,要求包含所有N中顏色,並使長度最短。
並分析時間複雜度與空間複雜度。
跟編程之美上"最小摘要"問題有點像,不過這裏是首位相連的,所以設置兩端重複的原序列,空間複雜度爲O(2m);
設置兩個指針,front,tail,開始都指向第一個位置;設置所有顏色的計數器;設置最短長度minLen;
1)front向後遍歷,並增加相應計數器值,直到所有顏色計數器都大於等於1,根據front和tail距離更新minLen;
2)更新minLen之後,tail向後遍歷,並減小相應計數器值,直到某一個顏色計數器爲0(否則,也應該更新一下minLen,即--minLen);此時繼續1)過程;
如此兩指針遍歷一次即可完成.