摘要: 为栈实现高效的max操作 题目: 请设计一个栈,除了提供push(压栈),pop(出栈),peak(取栈顶元素)操作以外,还能提供max(取栈中最大值)的功能,并使得时间复杂度最小。注:请仔细思考后再看下面的答案1. 方案一(不可行)设计一个成员max,等于栈中最大的元素,在每次push操作后,新压入的元素与max比较,然后将max赋值为它们中的大的元素值。这样,max函数则返回max。问题:如果栈中等于max的元素pop出去后,该max就不是栈中的最大值了。2. 方案二(可行,效率太低)在【方案一】的基础上改进,每当栈中等于max的元素pop出去后,则把剩余元素依次pop到临时数组,找出最大 阅读全文
posted @ 2012-05-16 22:51 Mr.Rico 阅读(1370) 评论(0) 推荐(0)
摘要: 交换两个整型数是C/C++中最常见的操作。实现这个操作的方法很多。最基本的方法就是使用一个临时变量,具体的代码如下:inta,b;inttmp;tmp=a;a=b;b=tmp;如果以函数的形式写出来的话就是:voidswap(int*a,int*b){inttmp;tmp=*a;*a=*b;*b=tmp;}在C++中,可以使用引用来实现的比较优雅:voidswap(int&a,int&b){inttmp;tmp=a;a=b;b=tmp;}另外,还经常出现的一种情况是不使用临时变量来交换两个整型数,一般常见的方法有两种:加法和异或运算,具体如下表所示: ... 阅读全文
posted @ 2012-05-16 20:38 Mr.Rico 阅读(13716) 评论(2) 推荐(3)