审题:
这题需要我们实现一个可以在常数时间内检索到最小元素的栈
思路:
如果不限制时间复杂度,我们可以使用for循环遍历查找,但是这里限制了时间复杂度。
思路一:维护min变量
可以创建一个min变量,然后每次插入对象进去就和min进行比较,将较小的留给min。但是这存在一个大问题,一旦我们执行了pop函数,把min的数据删掉了,我们就无法获取当前最小的数了
思路二:辅助栈(minsta)
我们额外创建一个栈(minsta),它的目的是让栈顶保持为最小数据。
插入逻辑:一旦sta中插入了比minsta栈顶数据更小的数据,就往minsta中插入该数据。
删除逻辑:若sta删除的元素和minsta的栈顶元素值一样,那么minsta也需要删除栈顶元素
疑问:如果该数据和minsta栈顶数据一致还需要插入吗?
需要,因为如果最小数据存在两个以上,其中一个删除掉了,sta中仍然剩下该最小数据,若我们在minsta中只保存了一个该数据,那么删除之后minsta栈顶就不是最小数据了
解题:
算法题(38):最小栈
被AI抢饭碗的人2025-01-18 23:40