欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode篇之栈:155(常数时间复杂度内找最小栈)

发布时间:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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(常数时间复杂度内找最小栈)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。