# Leetcode [No. 155] Min Stack (MEDIUM) + Blind169: Solved on 2024/02/09 ## 題目 https://leetcode.com/problems/min-stack/description/ ## 思路 + 這個解法非常trivial,因此時間複雜度也很高,花最多的時間就是在getMin()需要去花O(n)的時間來得到,實在太沒效率。 ```c++= class MinStack { public: MinStack() { } void push(int val) { arr.emplace_back(val); } void pop() { arr.pop_back(); } int top() { return arr[arr.size()-1]; } int getMin() { return *min_element(arr.begin(),arr.end()); } private: vector<int> arr; }; ``` ### 解法分析 + time complexity: O(nlgn) ### 執行結果  ## 改良: + 不使用`*min_element`來取得最小的值,改用其他方法。 + 改用一個vector去紀錄當前index的最小值,如: + arr: 1,2,3,4,5 + minArr: 1,1,1,1,1 ```C++= class MinStack { public: MinStack() { } void push(int val) { if(arr.empty()) { arr.emplace_back(val); minArr.emplace_back(val); } else { arr.emplace_back(val); minArr.emplace_back(min(minArr.back(),val)); } } void pop() { minArr.pop_back(); arr.pop_back(); } int top() { return arr[arr.size()-1]; } int getMin() { return minArr.back(); } private: vector<int> arr; vector<int> minArr; // this array is used to store the min value in current index }; ``` ### 解法分析 + time complexity: O(1) ### 執行結果 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up