题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数
解法一:
思路:采用java中自带的迭代函数进行处理。
public class Solution{
/**
* @param args
*/
Stack<Integer> stack = new Stack<Integer>();
public void push(int node) {
stack.push(node);
} public void pop() {
stack.pop();
} public int top() {
return stack.peek();//这里的top值是用.peek()函数,不要忘记了栈本身的内部函数
} public int min() {
int min = stack.peek();//第一个数出栈
int tmp = 0;
Iterator<Integer> iterator = stack.iterator();//迭代,以此出栈
while (iterator.hasNext()){
tmp = iterator.next();
if (min>tmp){
min = tmp;
}
}
return min;
} public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
min_stack ms=new min_stack();
ms.push(3);
ms.push(2);
ms.push(3);
System.out.println(ms.min());
}
}

解法二:

思路:用一个栈data保存数据,用另一个栈min保存以此入栈的最小数。如:data中以次入栈:5,4,3,8,9,10,111,12,1

则min中以次入栈:5,4,3,1

每次入栈的时候,如果入栈的元素比min中的栈顶元素小或等于则入栈,否则不如栈。

public class Solution{
Stack<Integer> data = new Stack<Integer>();
Stack<Integer> min = new Stack<Integer>();
Integer temp=null;
public void push(int node){
if(temp!=null){
if(node < temp){
min.push(node);
temp = node;//temp保存的是最小值
}
data.push(node);
}else{
temp = node;
data.push(node);
min.push(node);
} }
public int pop(){
int num = data.pop();
int num2 = min.pop();
if(num != num2){//判断栈min中是否已经存在了
min.push(num2);
}
}
public int top(){
int num = data.pop();
data.push(num);
return num;
}
public int min(){
int num = min.pop();
min.push(num);
return num;
}
}

解法三:

/*
* 1.dataStack为存储数据的栈,minStack为存储最小值的栈;
* 2.push的时候将value值与minStack中的top值比较,小则minStack push value,大则push top值
*/
class Solution {
public:
stack<int> dataStack, minStack;
void push(int value) {
dataStack.push(value);
if (minStack.empty()) {
minStack.push(value);
}
else{
int min = minStack.peek();

        if(value<min){
          minStack.push(value);
        }else{
          minStack.push(min);
        }

}

    }
void pop() {
dataStack.pop();
minStack.pop();
}
int top() {
return dataStack.peek();
}
int min() {
return minStack.peek();
}
};

包含min函数的栈的更多相关文章

  1. 剑指Offer面试题:19.包含Min函数的栈

    一.题目:包含Min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). 这里我们要实现的就是min ...

  2. 【编程题目】设计包含 min 函数的栈

    2.设计包含 min 函数的栈(栈)定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素.要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 我的思路: 用一个额外的 ...

  3. 【面试题021】包含min函数的栈

    [面试题021]包含min函数的栈  MinStack.cpp: 1234567891011121314151617181920212223242526272829303132333435363738 ...

  4. 面试经典-设计包含min函数的栈

    问题:设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素. 要求函数min.push以及pop的时间复杂度都是O(1). 解答:push 和pop的时间复杂度 ...

  5. 包含min函数的栈 ,二叉树的镜像

    包含min函数的栈 问题 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 代码 # -*- coding:utf-8 -*- class Sol ...

  6. 算法: 包含min函数的栈

    * @Description 包含min函数的栈* @问题:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).* @思路: 1:Stack 类中的p ...

  7. 《剑指offer》 包含min函数的栈

    本题来自<剑指offer> 包含min函数的栈 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路: 举例子让抽象问题具体 ...

  8. 41. 包含min函数的栈

    包含min函数的栈 描述 设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈. push(x)–将元素x插入栈中 pop()–移除栈顶元素 top()–得到栈顶元素 ...

  9. 《剑指offer》第三十题(包含min函数的栈)

    // 面试题30:包含min函数的栈 // 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min // 函数.在该栈中,调用min.push及pop的时间复杂度都是O(1). #i ...

  10. 《剑指offer》— JavaScript(20)包含min函数的栈

    包含min函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 实现代码 var stack = []; function push(node) { stack. ...

随机推荐

  1. c#调用C++DLL参数对应

    //c++:Byte(unsigned   char)     ----    c#:System.Byte         //c++:SHORT(short)              ----  ...

  2. oracle远程连接太慢

    场景:Oracle11G DB服务器上用sqlplus直接连很快(秒连),但加上服务名后却半天没反应.一台正式.一台测试都出现此问题. sqlplus:xnwz/xnwz 很快 sqlplus:xnw ...

  3. Python中super函数的用法

    之前看python文档的时候发现许多单继承类也用了super()来申明父类,那么这样做有何意义? 从python官网文档对于super的介绍来看,其作用为返回一个代理对象作为代表调用父类或亲类方法.( ...

  4. [HTML] CSS 语法

    CSS 实例 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明: 选择器通常是您需要改变样式的 HTML 元素. 每条声明由一个属性和一个值组成. 属性(property)是您希望设置的样 ...

  5. 【原】Windows下常用命令

    1.小技巧 打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口... 也可以通过cmd /c 命令 和 cmd /k 命令的方式来直接运行命令 注:/c表示执行完命令 ...

  6. 41. Unique Binary Search Trees && Unique Binary Search Trees II

    Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that st ...

  7. Oracle中的表构造导出到word Sql语句

    select * from ( SELECT t1.Table_Name AS "表名称", t3.comments AS "表说明",  t1.Column_ ...

  8. [VB.NET]调用系统的文件夹选择对话框

    以下示例代码展示如何调用系统的文件夹选择对话框: Private Function SelectFolder(ByVal Describe As String, Optional ByVal Show ...

  9. swift 当协议遇见了泛型

    由于泛型比较简单,并没有单独拿出来介绍!我们在定义函数的时候,有时候只是由于参数或者返回值类型不同,而具体的实现过程是一模一样的,这个时候我们就可以定义泛型函数而使可以传入不同的参数类型: func ...

  10. NHibernate系列文章三:简单的增删改查询

    摘要 上一篇文章只完成了简单的NHibernate安装.配置和连接数据库.这篇文章介绍怎样实现最简单的数据库读写操作. 1. 重构ISessionFactory生成过程 将生成ISessionFact ...