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 获取表单等数据的用法