您的位置:首页 > Web前端

剑指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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: