【Java】设计一个栈,并且push,pop和min三个方法的时间复杂度必须为O(1)

原创 2015年07月10日 13:29:41

设计一个栈,除pop与push方法,还支持min方法,可返回栈元素中的最小值。

push,pop和min三个方法的时间复杂度必须为O(1)

要保证min的时间复杂度为O(1), 那就不能每次通过遍历整个栈来获取最小值。假设这个栈初始为5:

5; 最小值为5; 压入7,栈变为

7,5;最小值为5; 压入3,栈变为

3,7,5; 最小值为3


这时弹出3,栈变为

7,5; 最小值为5; 弹出7, 栈变为

5; 最小值为5;


注意在7,5这个状态时,最小值都是5. 也就是说,如果我们能标记出栈的每个状态,那么可以直接取出最小值。可以用一个栈来保存最小值。

stack类的peek()方法,查看栈顶对象而不移除它

解法一:

import java.util.Stack;

class NodeWithMin {
	public int value;
	public int min;
	public NodeWithMin(int v, int min) {
		value = v;
		this.min = min;
	}
}

public class StackWithMin extends Stack<NodeWithMin> {
	public void push(int value) {
		int newMin = Math.min(value, min());
		super.push(new NodeWithMin( value, newMin));
	}
	
	public int min() {
		if ( this.isEmpty() ) {
			return Integer.MAX_VALUE;
		}
		else {
			return peek().min;
		}
	}
}


解法二:

import java.util.Stack;

public class StackWithMin2 extends Stack<Integer> {
	//an extra stack to store the minimum in every push operation
	Stack<Integer> s2;
	public StackWithMin2() {
		s2 = new Stack<Integer>();
	}
	
	public void push(int value) {
		if ( value <= min() ) {
			p2.push(value);
		}
		else {
			super.push(value);
		}
	}
	
	public Integer pop() {
		int value = super.pop();
		if( value == min() ) {
			s2.pop();
		}
		return value;
	}
	
	public int min() {
		if (s2.isEmpty()) {
			return Integer.MAX_VALUE;
		}
		else {
			return s2.peek();
		}
	}
}


【数据结构】实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1) 在栈中操作的话,push和pop的时间复杂度就是O(1),所以我们只用实现Min(返回...

实现一个栈,要求push,pop,Min的操作时间复杂度为O(1)

问题:实现一个栈,要求实现Push(入栈),Pop(出栈),Min(返回最小值)的操作时间复杂度为O(1). 分析:刚看到这个题的时候,用栈来实现Min(返回最小值)的操作,我的第一反应就是必须把栈中...

面试题系列 (二) 四种最常用的设计模式

请说出你所熟悉的几种设计模式。并举例说明: 下面列举四种最常用的设计模式 一、Strategy模式 1、两大原则 Strategy模式体现了如下的两大原则: 1,针对接口编程,而不是针对实现...
  • kansas
  • kansas
  • 2009年07月02日 11:22
  • 9156

JAVA学习33_Java 设计模式面试题

第 1 页 共 10 页 一、你对 MVC 的理解, MVC 有什么优缺点?结合 Struts ,说明在一个 Web 应用如何去使 用? 答: MVC 设计模式(应用观察者模式的框架模...

微软100题40题-设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。

/** * File:Test_40.java * Title: * Description: 40.百度研发笔试题(栈、算法) 引用自:zp155334877 1)设计一个栈结构,满足一下...

设计一个堆栈,函数min、push 以及pop 的时间复杂度都是O(1)

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

设计桟的 min、push以及pop的时间复杂度都是O(1) Java 实现

设计桟的min、push以及pop的时间复杂度都是O(1) ,这道题目是软件开发笔试中的高频题。 我阅读了一些大牛写的这个题目的答案。很多都是用c完成的,而且用了链式存储,或者多种结构体。 今天我就上...

实现一个栈,要求pop,push,Min,时间复杂度为O(1)

有两种方法。 方法一: 利用一个栈实现。思路如下: 1.入栈时,一次入两个元素,第一次入栈,直接元素入栈;第二次入栈,直接放最小的元素入栈。这样,栈顶元素永远是最小的,Min时,直接top(),...

实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)

实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)...

实现一个返回最小值的栈

一、 实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作) 的时间复杂度为O(1) (1)栈的基本操作入栈(push);出栈(pop);查找栈顶(top);栈的元素个数(...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java】设计一个栈,并且push,pop和min三个方法的时间复杂度必须为O(1)
举报原因:
原因补充:

(最多只允许输入30个字)