데이터 구조 면접 문제 1.2.3 - min 함 수 를 포함 한 스 택 디자인 [데이터 구조]
package questions;
import java.util.ArrayList;
/**
* @title min [ ]<br>
* @question , min , 。 min、push pop O(1)<br>
* @analysis : google 。
*
* , push , 。 。
* push , 。
*
* ( )。 push , ,
* 。
*
* 。 , : pop , ?
*
* ( ) 。 。 push , (
*
* 。 , )push ; pop
* , pop
* @author Sam
*
*/
public class Ex1o2o3 {
public static void main(String[] args) {
MinStack stack = new MinStack();
stack.push(3);
stack.print();
stack.push(4);
stack.print();
stack.push(2);
stack.print();
stack.push(1);
stack.print();
stack.pop();
stack.print();
stack.pop();
stack.print();
stack.push(0);
stack.print();
}
}
class MinStack {
private ArrayList<Integer> dataStack;// List min index
private ArrayList<Integer> minStack;// store the position of Min Element
public MinStack() {
dataStack = new ArrayList<Integer>();
minStack = new ArrayList<Integer>();
}
public void push(int item) {
if (isEmpty()) {
dataStack.add(item);
minStack.add(0);
} else {
dataStack.add(item);
int minIndex = minStack.get(minStack.size() - 1);
int min = dataStack.get(minIndex);
if (min > item) {
minStack.add(dataStack.size() - 1);
} else {
minStack.add(minIndex);
}
}
}
public int pop() {
int top = -1;
if (isEmpty()) {
System.out.println("no element,no pop");
} else {
minStack.remove(minStack.size() - 1);
top = dataStack.remove(dataStack.size() - 1);
}
return top;
}
public int min() {
if (isEmpty()) {
return -1;
}
int minIndex = minStack.get(minStack.size() - 1);
return dataStack.get(minIndex);
}
public void print() {
System.out.println(" \t \t ");
for (int i = 0; i < dataStack.size(); i++) {
System.out.println(String.format("%d\t%d\t%d", dataStack.get(i),
minStack.get(i), min()));
}
}
public boolean isEmpty() {
return 0 == dataStack.size();
}
}
출력 결과:
3 0 3
3 0 3
4 0 3
3 0 2
4 0 2
2 2 2
3 0 1
4 0 1
2 2 1
1 3 1
3 0 2
4 0 2
2 2 2
3 0 3
4 0 3
3 0 0
4 0 0
0 2 0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.