LeetCode篇之栈:155(常数时间复杂度内找最小栈)
生活随笔
收集整理的这篇文章主要介绍了
LeetCode篇之栈:155(常数时间复杂度内找最小栈)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
LeetCode篇之栈:155-->最小栈
- 题目:
- 解题思路:
- 源码:
- 踩坑点:
题目:
解题思路:
源码:
typedef struct Linknode{int data;int min;struct Linknode *next; } MinStack;/** initialize your data structure here. */MinStack* minStackCreate() {MinStack *stack = (MinStack *)malloc(sizeof(MinStack));if(stack == false)return false;stack->next = NULL;stack->min = INT_MIN;return stack; }void minStackPush(MinStack* obj, int x) {MinStack *s = (MinStack *)malloc(sizeof(MinStack));s->data = x;if(obj->next == NULL|| obj->next->min >= x)s->min = x;elses->min = obj->next->min;s->next = obj->next;obj->next = s; }void minStackPop(MinStack* obj) {if(obj->next == NULL)return ;else{obj->next = obj->next->next;} }int minStackTop(MinStack* obj) {if(obj->next != NULL)return obj->next->data;else return -1; }int minStackGetMin(MinStack* obj) {if(obj->next != NULL)return obj->next->min;else return -1; }踩坑点:
因为要在常数时间复杂度内找到最小值,所以不能遍历栈来找。
**解决:**在一个数据节点上设置一个保存最小值的域,插入一个数据元素比较一次,所以obj->next->min永远保存着最小栈。当删除obj->next节点时(删除时只能删这个节点),obj->next->next->min依旧是保存的最小值
总结
以上是生活随笔为你收集整理的LeetCode篇之栈:155(常数时间复杂度内找最小栈)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: PHP 设计模式 笔记与总结(8)策略模
- 下一篇: zpf 获取表单等数据的用法