Min Stack
2015-04-07 13:08 笨笨的老兔子 阅读(166) 评论(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;};
浙公网安备 33010602011771号