CMake 編譯 Log4cplus
阿新 • • 發佈:2021-09-22
很有意義的一個題目。其實本質是在一個類中維護了兩個棧,其中一個是正常的,另外一個維護的是最小元素,與其說維護的是最小元素,不如說維護的是該元素對應的元素被壓入棧中時,該最小棧中的最小元素。其巧妙之處在於,若彈出的元素非最小元素,則最小棧中彈出的元素也不是唯一的,下面肯定還有。而若彈出的元素為當前最小值,則該最小值在最小棧中也會被彈出,剩下的則是之前壓棧這個動作完成後的最小值。很巧妙,值得紀念
1 class MinStack { 2 stack<int> x_stack; 3 stack<int> min_stack; 4 public: 5MinStack() { 6 min_stack.push(INT_MAX); 7 } 8 9 void push(int x) { 10 x_stack.push(x); 11 min_stack.push(min(min_stack.top(), x)); 12 } 13 14 void pop() { 15 x_stack.pop(); 16 min_stack.pop(); 17 } 18 19 int top() {20 return x_stack.top(); 21 } 22 23 int getMin() { 24 return min_stack.top(); 25 } 26 };