微软100题-第2题设计包含min函数的栈
来源:互联网 发布:java获取系统时间 编辑:程序博客网 时间:2024/06/01 22:16
scala版本
package msimport 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-92.设计包含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/22096809
c语言版本
/* * microsoft002.c * * Created on: 2017年1月26日 * Author: admin *2.设计包含min函数的栈(栈)定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。 */#include <stdio.h>#define ARRAY_MAX_LENGHT 100void 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;}
0 0
- 微软100题-第2题设计包含min函数的栈
- [微软面试100题] 设计包含min函数的栈
- (微软100题)2.设计包含min 函数的栈。
- 【微软100题】002设计包含 min 函数的栈
- 【微软100面试题实现】第02题:设计包含min函数的栈
- 第2题:设计包含min函数的栈
- 微软等面试100题筛选答案-2-设计包含min函数的栈
- 微软等面试100题第二题:设计包含min函数的栈
- 微软面试100题之二 设计包含min函数的栈。
- (微软面试100题)设计包含min 函数的栈
- 【微软面试100题】2.设计包含min函数的栈
- 微软面试100题系列-设计包含 min 函数的栈
- 微软100题系列之-----设计包含min函数的栈
- 微软面试100题系列---设计包含min函数的栈
- 微软算法数据结构100题解答 2:设计包含min函数的栈
- 【100题】设计包含min 函数的栈
- 面试100题:2.设计包含min函数的栈
- 面试100题:2.设计包含min函数的栈
- hibernate注解(二)
- logback 常用配置详解(三) <filter>
- 使用命令行创建Zend framework项目
- 读取项目中properties文件中的账号密码进行加密解密
- user版本的root方法
- 微软100题-第2题设计包含min函数的栈
- 多线程、分布式任务如何向HDFS加载数据
- Ionic 启动流程
- mongodb 的副本集相关整理
- 工作日记:2017年1月4日17:29:25
- JAVA SE API学习 java.io.File
- android中关于toolbar的使用
- HttpClient 4.5.2例子
- 如何自定义跳转页面