设计包含 min 函数的栈
2012-11-08 22:08
148 查看
定义栈的数据结构,要求添加一个min的函数,能够得到栈的最下元素。
要求函数min, push, pop的时间复杂度都是O(1)
开始我是这么想的 用一个min index 当push时很容易,直接与push(int d), s[min] 和 d 做比较然后更新min
但是pop 就出问题了。当min出去了,必须要找到次min的,这时就要另外用空间保存起来。
当我想到这个方法时,还是没有做出来,我知道 增加一个辅助 stack,栈顶保存最小的,但是当push时,怎么更新
这个stack呢?这里我出现问题了,我想的是把push进来的元素在辅助栈中找到合适的位置,而不是最小的元素的位置
可能造成这种想法的原因如下
1 : 没有定义好辅助stack的意义 (辅助stack 栈顶的元素是 data 栈中从栈底到栈顶最小元素的位置)
以后要把每个步骤想清楚,而不是模模糊糊。
要求函数min, push, pop的时间复杂度都是O(1)
开始我是这么想的 用一个min index 当push时很容易,直接与push(int d), s[min] 和 d 做比较然后更新min
但是pop 就出问题了。当min出去了,必须要找到次min的,这时就要另外用空间保存起来。
当我想到这个方法时,还是没有做出来,我知道 增加一个辅助 stack,栈顶保存最小的,但是当push时,怎么更新
这个stack呢?这里我出现问题了,我想的是把push进来的元素在辅助栈中找到合适的位置,而不是最小的元素的位置
可能造成这种想法的原因如下
1 : 没有定义好辅助stack的意义 (辅助stack 栈顶的元素是 data 栈中从栈底到栈顶最小元素的位置)
以后要把每个步骤想清楚,而不是模模糊糊。
void push(int s, int x) { s[top] = x; if (0 == top) { min[top] = 0; } else if (min[top] < x) { min[top+1] = top; } else { min[top+1] = top+1; } ++top; } void pop(int s) { return pop(--top); } int min(int min) { return s[min[top-1]]; }
相关文章推荐
- 每天学习一算法系列(3)--设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- NO.2 设计包含min 函数的栈
- 笔试题:设计包含min 函数的栈
- 面试题系列-----数据结构(设计包含 min 函数的栈(栈))
- 设计一个包含pop,push,min在内的栈,并且各个函数的时间复杂度均为o(1)
- 【微软100题】002设计包含 min 函数的栈
- 设计包含min 函数的栈(push\pop\min)
- 2.设计包含min 函数的栈
- No2、设计包含 min 函数的栈(栈)
- 2.设计包含 min 函数的栈[StackWithMinValue]
- 算法与数据结构面试题(2)-设计包含min 函数的栈
- 2.设计包含min 函数的栈。
- 【100题】设计包含min 函数的栈
- 设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1)
- 设计包含min 函数的栈(程序分析)
- 【编程题目】设计包含 min 函数的栈
- 第二题(设计包含min 函数的栈)
- 设计包含 min 函数的栈
- 面试题三:设计包含 min 函数的栈。
- 2.设计包含min 函数的栈。3.求子数组的最大和