class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
vector<int> dp(cost.size());
dp[0] = cost[0];
dp[1] = cost[1];
for(int i = 2; i < cost.size();i++)
{
dp[i] = min(dp[i-2],dp[i-1]) + cost[i];
}
return min(dp[cost.size()-1],dp[cost.size()-2]);
}
};
class MyQueue {
public:
MyQueue() {
}
stack<int> st1;
stack<int> st2;
void push(int x) {
st1.push(x);
}
int pop() {
if(st1.empty()) return -1;
while(!st1.empty())
{
int tmp = st1.top();
st1.pop();
st2.push(tmp);
}
int num = st2.top();
st2.pop();
while(!st2.empty())
{
int tmp = st2.top();
st2.pop();
st1.push(tmp);
}
return num;
}
int peek() {
if(st1.empty()) return -1;
while(!st1.empty())
{
int tmp = st1.top();
st1.pop();
st2.push(tmp);
}
int num = st2.top();
while(!st2.empty())
{
int tmp = st2.top();
st2.pop();
st1.push(tmp);
}
return num;
}
bool empty() {
if(st1.empty()) return true;
return false;
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/