최소 기능을 포함하는 스택 AcWing
기술
- 지지 푸쉬하기위한 팝, 상부 및 다른 작업은 O (1) 시간에서의 작은 스택 엘리먼트를 검색 할 수있다.
- (x)는 푸시 - 스택은 원소 X에 삽입
- ) (팝업 - 최상위 요소를 제거
- 상단 () - 상단의 요소의 취득
- getMin은 () - 스택에 최소의 요소를 얻을 수
기타 :
- 이 질문은 매우 독특한 샘플 입력과 출력을하다
(이상한)차례로 링크를
해결 방법 :
- 스택입니다.
- 우선, 처음 세 정상 작동 스택이다. 함께 데이터 구조에 기억 : 제 4 개 개의 조작이 약간 발견 고려를 할 수있는 후 각각의 시간의 과거 스택이 후에 수행 될 수 있도록 최소한 의 감소 .
- 그래서 약간 스택을 선택합니다. 특정 스택은 새로운 기록 최소마다 시간을 열 수 있습니다. 원래 스택 직접 새로 적층 맥스 (새로운 스택 최상부 요소)을 삽입 삽입 요소 삽입. 새로운 팝업 상단 원래 스택 팝업 스택 할 수 있습니다합니다.
- O의 복잡성 (1), 아주 좋아.
//这题题目给了一个类似封装的东西,你只需要往相应的地方填代码就好了。在C++编译不过没关系
class MinStack {
public:
/** initialize your data structure here. */
stack<int> stk1, stk2;
MinStack() {
}
void push(int x) {
stk1.push(x);
if(!stk2.size()) stk2.push(x);
else stk2.push(min(x, stk2.top()));
}
void pop() {
stk1.pop(), stk2.pop();
}
int top() {
return stk1.top();
}
int getMin() {
return stk2.top();
}
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(x);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/