## It's annoying..

Sorry for being picky. But I think it seems impossible to retain the trace of getMin() after several pop() in time of O(1).

## Please enlighten me if you get any idea

## First Thought

```
Initial:
s = [3, 2, 1, -1]
getMin() // -1
pop() // s = [3, 2, 1]
getMin() // should be 1 at index 2
```

But how can we find this index in linear time?

We can introduce another pointer preMin, but what if there is another pop()?

```
Continue:
pop() // s = [3, 2]
getMin() // should be 2 at index 1
```

if seems to get chained up by the number of calling of pop()

## Another Thought

We might have another sorted list/array/vector to keep track of the elements have been pushed into MinStack. But I believe it would introduce extra cost to push() method and boost the time complexity to O(lg(n))(e,g, binary search).