微软面试题系列(二):设计包含 min 函数的栈
2012-08-28 12:14
260 查看
昨天晚上完成第一个问题,今天来完成第二个问题。依然是网上搜索的到思路,觉得其实现比较优雅,就自己写了一遍,把思路整理一下!
有人说用链表来实现链栈,我个人觉得太过于麻烦,还是数组直接,简单!
解决这道题的思路在于:用空间换时间!很关键,很直白,但并不是很个人都能很灵活的运用!比如我就不能!
代码实现也很简单,定义一个结构体,结构体中两个等大的数组data[M],mIndex[M],一个存储数据,另一个存储最小值的下标,
mIndex[i]表示[0,i]区间中最小值的下标。思路明白了代码就很好写了,下面是一种我认为很严谨的实现方式:当然是别人写的,我copy了一遍!还是贴上来吧,以供参考:
唉!该好好学学数学了,把大脑练灵活点!
有人说用链表来实现链栈,我个人觉得太过于麻烦,还是数组直接,简单!
解决这道题的思路在于:用空间换时间!很关键,很直白,但并不是很个人都能很灵活的运用!比如我就不能!
代码实现也很简单,定义一个结构体,结构体中两个等大的数组data[M],mIndex[M],一个存储数据,另一个存储最小值的下标,
mIndex[i]表示[0,i]区间中最小值的下标。思路明白了代码就很好写了,下面是一种我认为很严谨的实现方式:当然是别人写的,我copy了一遍!还是贴上来吧,以供参考:
/* * Problem_2.cpp * 设计包含 min 函数的栈 * Created on: 2012-8-28 * Author: Administrator */ #include<stdio.h> #include<string.h> #define M 100 struct Stack{ int data[M]; int mIndex[M]; int top; Stack(){ top=-1; memset(mIndex,-1,sizeof(mIndex)); } }; Stack s; bool push(int value){ if(s.top>=M) return false; s.data[++s.top]=value; if(s.top==0){ s.mIndex[s.top]=0; }else if(value<s.data[s.mIndex[s.top-1]]){ s.mIndex[s.top]=s.top; }else{ s.mIndex[s.top]=s.mIndex[s.top-1]; } return true; } bool pop(int &data){ if(s.top<0) return false; s.mIndex[s.top]=-1; data=s.data[s.top]; s.top--; return true; } bool min(int &m){ if(s.top<0) return false; m= s.data[s.mIndex[s.top]]; return true; } int main(){ push(5); push(2); push(4); push(1); // pop();pop(); int m; min(m); printf("%d",m); }
唉!该好好学学数学了,把大脑练灵活点!
相关文章推荐
- 微软面试100题系列-设计包含 min 函数的栈
- 面试题系列-----数据结构(设计包含 min 函数的栈(栈))
- 【微软100题】002设计包含 min 函数的栈
- (微软面试100题)设计包含min 函数的栈
- 【从零单排之微软面试100题系列】02之包含 min 函数的栈
- 每天学习一算法系列(3)--设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 面试题三:设计包含 min 函数的栈。
- 微软面试题解题笔记——包含min 函数的栈
- 算法与数据结构面试题(2)-设计包含min 函数的栈
- (微软100题)2.设计包含min 函数的栈。
- 每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- (微软100题)2.设计包含min 函数的栈。
- 设计一个包含pop,push,min在内的栈,并且各个函数的时间复杂度均为o(1)
- 【剑指Offer学习】【面试题21:包含min 函数的钱】
- 第二题 设计包含min 函数的栈。
- 设计包含 min 函数的栈
- 数据结构——算法之(009)( 设计包含min 函数的栈)
- 设计包含min()函数的栈
- 2、设计包含min 函数的栈
- No2、设计包含 min 函数的栈(栈)