LeetCode 155 Min Stack(实现具有特殊操作的栈)
来源:互联网 发布:怎么修改淘宝密码 编辑:程序博客网 时间:2024/06/07 18:39
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
Example:
MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> Returns -3.minStack.pop();minStack.top(); --> Returns 0.minStack.getMin(); --> Returns -2.
题目大意:实现一个支持push、pop、top以及getMin(返回栈中最小元素)操作的栈。
解题思路:利用动态数组模拟栈,每次push操作都将一个结构体入栈,结构体中包括当前入栈元素和当前栈中元素的最小值。每种作只需要常数时间。
代码如下:
typedef struct { int val; int min;} Node;typedef struct { Node *arr; int top; int size;} MinStack;/** initialize your data structure here. */MinStack *minStackCreate(int maxSize) { MinStack *mstk = (MinStack *) malloc(sizeof *mstk); mstk->arr = (Node *) malloc(sizeof(Node) * (maxSize + 1)); mstk->arr[0].min = INT_MAX; mstk->size = maxSize; mstk->top = 0; return mstk;}void minStackPush(MinStack *obj, int x) { obj->arr[++obj->top].val = x; if (obj->arr[obj->top-1].min > x) obj->arr[obj->top].min = x; else obj->arr[obj->top].min = obj->arr[obj->top-1].min;}void minStackPop(MinStack *obj) { obj->top--;}int minStackTop(MinStack *obj) { return obj->arr[obj->top].val;}int minStackGetMin(MinStack *obj) { return obj->arr[obj->top].min;}void minStackFree(MinStack *obj) { free(obj->arr); free(obj);}
阅读全文
0 0
- LeetCode 155 Min Stack(实现具有特殊操作的栈)
- LeetCode 155 Min Stack(最小栈)
- [LeetCode-155] Min Stack(设计一个 min 函数栈)
- 【LeetCode】Min Stack带最小值操作的栈
- LeetCode(155) Min Stack
- leetcode解题之155# Min Stack Java版 (包含min函数的栈)
- leetcode 155. Min Stack 最小栈的实现
- LeetCode(155) Min Stack
- [leetcode 155] Min Stack
- leetCode #155 Min Stack
- LeetCode[155]Min Stack
- leetcode-155 Min Stack
- leetcode 155 Min Stack
- LeetCode[155]-Min Stack
- leetcode 155:Min Stack
- LeetCode---(155)Min Stack
- leetcode-155-Min Stack
- leetcode 155: Min Stack
- Python基本文件操作
- C++的一些基本用法
- [计算机组成原理]--关于磁盘平均存取时间
- JUnit单元测试--IntelliJ IDEA
- 转载:使用 GDB 恢复堆栈信息
- LeetCode 155 Min Stack(实现具有特殊操作的栈)
- 1068. 万绿丛中一点红(20)
- 基于R语言的多元线性回归--我国经济增长的定量研究
- Android设置界面_Preference
- 使用Markdown编辑器写博客
- 直接拿来用!十大Material Design开源项目
- [LintCode]373.奇偶分割数组
- 安卓开发之EventBus的使用分享以及例子源码
- 点击流日志分析项目实战开发流程