微软100题-第2题设计包含min函数的栈
2017-01-04 17:30
471 查看
scala版本
package ms import scala.collection.mutable.ArrayBuffer /** * 2.设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 */ class CustomStack[T<%Ordered[T]]{ var data:ArrayBuffer[T]=ArrayBuffer[T](); var mins:ArrayBuffer[T]=ArrayBuffer[T](); def push(value:T)={ data.append(value) if(mins.isEmpty){ mins.append(value) }else{ if(mins(mins.length-1)>value){ mins.append(value) } } } def pop():Option[T]={ if(data.length==0){ return None } val v=data.remove(data.length-1); if(v==mins(mins.length-1)){ mins.remove(mins.length-1) } return Some(v) } def min():Option[T]={ if(mins.length==0){ return None } Some(mins(mins.length-1)) } } object MicroSoft002 extends App{ val stack=new CustomStack[Int](); stack.push(5); stack.push(10); stack.push(3); println(stack.min) stack.pop() println(stack.min) stack.pop() println(stack.min) stack.pop() println(stack.min) }
python版本
''' Created on 2017-1-9 2.设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 @author: admin ''' class MinStack: def __init__(self): self.mainAry=[] self.auxAry=[] def push(self,data): if len(self.mainAry)==0: self.auxAry.append(data) elif data<=self.auxAry[len(self.auxAry)-1]: self.auxAry.append(data) self.mainAry.append(data) def pop(self): if len(self.mainAry)==0: raise IndexError data=self.mainAry[len(self.mainAry)-1] del self.mainAry[len(self.mainAry)-1] if data==self.auxAry[len(self.auxAry)-1]: del self.auxAry[len(self.auxAry)-1] return data def min(self): if len(self.auxAry)==0: raise IndexError else: return self.auxAry[len(self.auxAry)-1] if __name__ == '__main__': stack=MinStack() stack.push(7) stack.push(5) stack.push(9) stack.push(2) stack.push(4) print(stack.pop()) print(stack.min()) print(stack.pop()) print(stack.min()) print(stack.pop()) print(stack.min()) print(stack.pop()) print(stack.min())
java版本
地址1 http://blog.csdn.net/hxpjava1/article/details/22096809c语言版本
/* * microsoft002.c * * Created on: 2017年1月26日 * Author: admin * 2.设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 */ #include <stdio.h> #define ARRAY_MAX_LENGHT 100 void push(int data); int min(); int pop(); //主数组 static int mainArray[ARRAY_MAX_LENGHT]; //辅助数组 static int auxArray[ARRAY_MAX_LENGHT]; static int mainIndex=0; static int auxIndex=0; int main2(){ push(5); push(4); push(10); printf("%d\n",min()); printf("%d\n",pop()); printf("%d\n",min()); printf("%d\n",pop()); printf("%d\n",min()); return 0; } void push(int data){ mainArray[mainIndex++]=data; if(auxIndex==0){ auxArray[auxIndex++]=data; }else{ if(auxArray[auxIndex-1]>data){ auxArray[auxIndex++]=data; } } } int min(){ if(auxIndex==0){ return -1; } return auxArray[auxIndex-1]; } int pop(){ if(mainIndex==0){ return -1; } if(mainArray[mainIndex-1]==auxArray[auxIndex-1]){ auxIndex--; } return mainArray[--mainIndex]; }
c++版本
/** microsoft002.cpp
*
* Created on: 2017年2月6日
* Author: admin
2.设计包含min函数的栈(栈)
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
*/
#define MAX_LEN 100
#include "iostream"
using namespace std;
template <typename T>
class MinStack{
public:
MinStack(){
mainIndex=0;
auxIndex=0;
}
public:
void push(T value){
mainArray[mainIndex++]=value;
if(auxIndex==0){
auxArray[auxIndex++]=value;
}else{
if(value<=auxArray[auxIndex-1]){
auxArray[auxIndex++]=value;
}
}
}
T pop(){
T tmp=mainArray[mainIndex-1];
if(auxArray[auxIndex-1]==mainArray[mainIndex-1]){
mainIndex--;
auxIndex--;
}else{
mainIndex--;
}
return tmp;
}
T min(){
return auxArray[auxIndex-1];
}
private:
int mainIndex;
int auxIndex;
T mainArray[MAX_LEN];
T auxArray[MAX_LEN];
};
int main002(){
MinStack<int> stack;
stack.push(10);
stack.push(9);
stack.push(12);
stack.push(6);
cout<<stack.min()<<endl;
cout<<stack.pop()<<endl;
cout<<stack.min()<<endl;
stack.push(3);
cout<<stack.min()<<endl;
cout<<stack.pop()<<endl;
cout<<stack.min()<<endl;
return 0;
}
相关文章推荐
- Ionic 启动流程
- spark运行简单的demo程序
- 多线程、分布式任务如何向HDFS加载数据
- IOS Cache设计详细介绍及简单示例
- Laravel之路——file缓存修改为redis缓存
- 新建项目
- EF进阶篇(一)——概述
- 读取项目中properties文件中的账号密码进行加密解密
- 使用命令行创建Zend framework项目
- JSONP的优劣点
- [置顶] Android实现应用的增量更新\升级 标签: 增量更新Androidbsdiffpatch增量升级 2016-01-25 16:01
- logback 常用配置详解(三) <filter>
- spring知识点总结
- hibernate注解(二)
- Map 与 beanClass 互转
- JS入门之ActiveXObject对象(转载)
- Spring MVC Integration,Spring Security
- 简单配置和使用Maven
- C#固定时间执行指定事件(观察者模式+异步委托)
- ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(34)、chr(39)