剑指Offer-包含min函数的栈
2017-06-16 11:07
344 查看
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
题目解析
这个题意思不明确,而且代码给出的部分参不透到底是要干嘛,可能我的理解有问题,经过一番折腾才明白是要自己重新写一个类Stack的类,但是包含min函数,能够自己求出他的最小值。解题思路
我觉得这个题目本身含糊不清,题目给出的代码中,引入了Stack这个类,意思就是可以借助Stack来实现一个包含min方法的栈。或许题目这样出就是拐弯考察答题者的变通性,但是感觉这样做意义不大。这个题目可以这样想:
定义两个栈,一个用于接收所有的数据,另一个只是用于存储最小的值,当pop的时候如果栈顶就是最小值,两者全部pop栈顶元素,然后只需要将包含所有数据的栈(以下成为stack1)全部出栈存储到另一个存储最小值的栈(以下称stack2)中去,在遍历的过程中求出哪个数据是最小的值,再将数据从stack2中导出到stack1中去,还原了原来的数据,这个地方算是稍微复杂一点的地方,其他的方法难度不大。
实现代码
import java.util.Stack;public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
if(stack2.empty()) {
stack2.push(node);
}else{
int node2 = stack2.peek();
if(node2 >= node) {
stack2.pop();
stack2.push(node);
}
}
}
public void pop() {
if(stack1.peek() == stack2.peek()) {
stack2.pop();
stack1.pop();
int index = 0;
int min = 0;
while(!stack1.empty()) {
int data = stack1.pop();
if(index == 0)
min = data;
else {
min = min > data ? data : min;
}
stack2.push(data);
index ++;
}
while(!stack2.empty()) {
int data = stack2.pop();
stack1.push(data);
}
stack2.push(min);
return ;
}
stack1.pop();
}
public int top() {
return stack1.peek();
}
public int min() {
return stack2.peek();
}
}
相关文章推荐
- 剑指offer-包含min函数的栈
- 剑指Offer之 - 包含min函数的栈
- 包含min函数的栈 (剑指Offer 第 19 题)
- 【九度OJ1522】|【剑指offer21】包含min函数的栈
- 【剑指offer-Java版】21包含min函数的栈
- 剑指offer--包含min函数的栈
- 剑指offer——面试题21:包含min函数的栈(泛型编程,一个巧妙的思维)
- 剑指offer - 包含min函数的栈
- Java - 剑指offer_面试题21_包含min函数的栈
- 剑指offer--面试题21:包含min函数的栈--Java实现
- 【剑指offer】面试题21:包含min函数的栈
- 【剑指offer】面试题21:包含min函数的栈
- 剑指Offer:面试题21——包含min函数的栈(java实现)
- 剑指offer 21 包含min函数的栈
- 剑指offer之十七---包含min函数的栈
- 剑指offer 面试题21 包含min函数的栈
- 剑指offer--面试题30:包含min函数的栈
- 剑指offer_栈和队列---包含min函数的栈
- 剑指offer 包含min函数的栈
- 剑指Offer - 九度1522 - 包含min函数的栈