Min Stack
2015-04-07 13:08 笨笨的老兔子 阅读(157) 评论(0) 编辑 收藏 举报设计一个最小堆,要求实现push、pop、top、getMin几个功能。
思路:主要问题在于getMin,必须是一个常数级的查找返回,因此最好是每push一个就和当前min进行比较,始终保存min。
class MinStack {
public:
MinStack()
{
head = new ListNode(INT_MAX);
}
void push(int x) {
ListNode* tmpNode=new ListNode(x);
if (x < head->val)
{
head->val = x;
}
tmpNode->next = head->next;
head->next = tmpNode;
}
void pop() {
if (head->next )
{
if (head->val == head->next->val)
{
ListNode* tmp = head->next->next;
head->val = INT_MAX;
while (tmp)
{
if (tmp->val < head->val)
head->val = tmp->val;
tmp = tmp->next;
}
}
head->next = head->next->next;
}
}
int top() {
if (head->next)
return head->next->val;
}
int getMin() {
if (head->next)
return head->val;
}
private:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* head;
};