码迷,mamicode.com
首页 > 其他好文 > 详细

Min Stack

时间:2015-04-07 13:47:08      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

设计一个最小堆,要求实现push、pop、top、getMin几个功能。

思路:主要问题在于getMin,必须是一个常数级的查找返回,因此最好是每push一个就和当前min进行比较,始终保存min。

  1. class MinStack {
  2. public:
  3. MinStack()
  4. {
  5. head = new ListNode(INT_MAX);
  6. }
  7. void push(int x) {
  8. ListNode* tmpNode=new ListNode(x);
  9. if (x < head->val)
  10. {
  11. head->val = x;
  12. }
  13. tmpNode->next = head->next;
  14. head->next = tmpNode;
  15. }
  16. void pop() {
  17. if (head->next )
  18. {
  19. if (head->val == head->next->val)
  20. {
  21. ListNode* tmp = head->next->next;
  22. head->val = INT_MAX;
  23. while (tmp)
  24. {
  25. if (tmp->val < head->val)
  26. head->val = tmp->val;
  27. tmp = tmp->next;
  28. }
  29. }
  30. head->next = head->next->next;
  31. }
  32. }
  33. int top() {
  34. if (head->next)
  35. return head->next->val;
  36. }
  37. int getMin() {
  38. if (head->next)
  39. return head->val;
  40. }
  41. private:
  42. struct ListNode {
  43. int val;
  44. ListNode *next;
  45. ListNode(int x) : val(x), next(NULL) {}
  46. };
  47. ListNode* head;
  48. };




Min Stack

标签:

原文地址:http://www.cnblogs.com/flyjameschen/p/ce753085aaafc40859564bb28d74f088.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!