从零开始算法之路 ---- 最小栈

朱雀 2021-11-10 13:14 437阅读 0赞
这篇博客虽然简单、垃圾,但本来就是我自己写的,没有参考过别的博客 ,原文链接就是本篇地址,不要见怪。我这么写是 CSDN 评审不过,非说我不是原创。

前言:小白入门题解,算法大佬可以直接跳过此博客(大佬轻喷哈)
题源: 力扣(LeetCode)https://leetcode-cn.com/problems/min-stack
题目描述:
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

  push(x) – 将元素 x 推入栈中。
  pop() – 删除栈顶的元素。
  top() – 获取栈顶元素。
  getMin() – 检索栈中的最小元素。
示例:

  MinStack minStack = new MinStack();
  minStack.push(-2);
  minStack.push(0);
  minStack.push(-3);
  minStack.getMin(); —> 返回 -3.
  minStack.pop();
  minStack.top(); —> 返回 0.
  minStack.getMin(); —> 返回 -2.
思路:顺序栈(用一位数组实现) 详情看代码。
代码:

  1. class MinStack {
  2. private:
  3. // 定义栈顶指针
  4. int topp;
  5. // 定义栈能存储最多元素个数
  6. int maxSize;
  7. // 定义顺序栈,用一维数组实现
  8. int *elements;
  9. public:
  10. /** initialize your data structure here. */
  11. MinStack() {
  12. // 定义一个构造函数初始化书需个变量
  13. // 初始化栈顶指针 topp = -1, 表示栈为空
  14. topp = -1;
  15. // 假设改栈能存储的最大元素个数为 200
  16. //maxSize = 500; 稍微大一点,如果用 500 会出错
  17. maxSize = 1000;
  18. // 初始化栈空间
  19. elements = new int[maxSize];
  20. }
  21. // 将元素 x 推入栈中。
  22. void push(int x) {
  23. // 先判断栈满否,满则元素不能进栈,返回结束
  24. if(topp == maxSize - 1) return;
  25. // 栈不满,元素进栈,栈顶指针先加 1 再进栈
  26. topp = topp + 1;
  27. elements[topp] = x;
  28. }
  29. // 删除栈顶的元素。
  30. void pop() {
  31. // 先判断栈是否为空,为空则没有元素可删除,返回结束
  32. //if(topp == -1) return ;
  33. // 如果栈不为空,则删除栈顶元素,栈顶指针减 1
  34. topp = topp - 1;
  35. }
  36. // 获取栈顶元素。
  37. int top() {
  38. // 先判断栈是否为空,为空则没有元素可获取,返回结束
  39. //if(topp == -1) return 0;
  40. // 如果栈不为空,返回栈顶元素
  41. if(topp == -1) return NULL;
  42. return elements[topp];
  43. }
  44. int getMin(){
  45. // O(n) 的时间复杂度
  46. if(topp == -1) return NULL;
  47. int min = elements[0];
  48. for(int i = 1; i <= topp; i++){
  49. if(min > elements[i])
  50. min = elements[i];
  51. }
  52. return min;
  53. }
  54. };

发表评论

表情:
评论列表 (有 0 条评论,437人围观)

还没有评论,来说两句吧...

相关阅读

    相关 开始算法 ----

    这篇博客虽然简单、垃圾,但本来就是我自己写的,没有参考过别的博客 ,原文链接就是本篇地址,不要见怪。我这么写是 CSDN 评审不过,非说我不是原创。 前言:小白入门题解,