考查对栈的理解,入栈,出栈操作,解题思路。
题:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
解:
解一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| package interview.q1;
import java.util.Random; import java.util.Stack;
public class Demo1 {
Stack stack1 = new Stack(); Stack stack2 = new Stack();
int min = 0;
public void push(int node) { stack1.push(node); if (stack1.size() == 1) { min = (int) stack1.peek(); } else { if (min > node) { min = node; } } stack2.push(min); }
public void pop() { stack1.pop(); stack2.pop(); min = (int) stack2.peek(); }
public int top() { return (int) stack1.peek(); }
public int min() { return min; }
public static void main(String[] args) { Demo1 demo1 = new Demo1(); Random random = new Random(); for (int i = 0; i < 10; i++) { int anInt = random.nextInt(100); demo1.push(anInt); } System.out.println(demo1.min());
for (int i = 0; i < 10; i++) { demo1.pop(); } System.out.println(demo1.min()); } }
|
解二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| package interview.q1;
import java.util.Arrays; import java.util.Random; import java.util.Stack;
public class Demo2 {
private Integer[] elements = new Integer[10]; private int size = 0; private int min = 0;
private Stack<Integer> minStack = new Stack<>();
public void push(int node) { ensureCapacity(size + 1); elements[size++] = node; if (size == 1) { min = node; } else { if (node < min) { min = node; } } minStack.push(min); }
public void ensureCapacity(int size) { int len = elements.length; if (size > len) { int newLen = len * 2; elements = Arrays.copyOf(elements, newLen); } }
public void pop() { if (size >= 1) { elements[size - 1] = null; } size--; minStack.pop(); min = minStack.peek(); }
public int top() { if (size >= 1) { return elements[size - 1]; } return Integer.parseInt(null); }
public int min() { return min; }
public static void main(String[] args) { Demo2 demo1 = new Demo2(); Random random = new Random(); for (int i = 0; i < 10; i++) { int anInt = random.nextInt(100); demo1.push(anInt); } System.out.println(demo1.min());
for (int i = 0; i < 10; i++) { demo1.pop(); } System.out.println(demo1.min()); } }
|