上一页 1 ··· 8 9 10 11 12 13 14 15 16 下一页
摘要: 何海涛面试题11,数值的整数次方不使用库函数,实现double power(double base,int ex)。#include<iostream>using namespace std;bool invalidinput=false;//判断两浮点数数是否相等的方法,不能直接用等号bool equal(double num1,double num2){ if((num1-num2>-0.0000001)&&(num1-num2<0.00000001)) { return true; } else return false;}//采用递归算法,O(l 阅读全文
posted @ 2012-11-22 22:34 代码改变未来 阅读(764) 评论(0) 推荐(0) 编辑
摘要: 解法:有两个队列q1和q2,先往q1内插入a,b,c,这做的都是栈的push操作。现在要做pop操作,即要得到c,这时可以将q1中的a,b两个元素全部dequeue并存入q2中,这时q2中元素为a,b,对q1再做一次dequeue操作即可得到c。如果继续做push操作,比如插入d,f,则把d,f插入到q2中,此时若要做pop操作,则做步骤2以此类推,就实现了用两个队列来实现一个栈的目的。注意在此过程中,新push进来的元素总是插入到非空队列中,空队列则用来保存pop操作之后的那些元素,那么此时空队列不为空了,原来的非空队列变为空了,总是这样循环。对于push和pop操作,其时间为O(n).#i 阅读全文
posted @ 2012-11-16 22:36 代码改变未来 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 何海涛面试题22#include<iostream>#include<stack>using namespace std;bool IsPopOrder(int a[],int b[],int n)//压入序列和弹出序列及长度{ bool flag=false; if(n>0) { int i=0,j=0; stack<int>s; while(j<n) { while(s.empty()||s.top()!=b[j])//压入a[5]={1,2,3,4,5}直到元素等于b[0],b[5]={4,5,3,2,1}(正确)和{4,3,5,2,1}( 阅读全文
posted @ 2012-11-13 23:33 代码改变未来 阅读(1019) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>#include<stack>using namespace std;template <typename T> class StackWithMin{public: StackWithMin(void); ~StackWithMin(void); void push(const T& node); void pop(); T& min const();private: stack<T> m_data; stack<T> m_min;};template <typename T 阅读全文
posted @ 2012-11-12 23:23 代码改变未来 阅读(560) 评论(0) 推荐(0) 编辑
摘要: 用两个栈实现队列。队列的两个函数分别实现队列尾部插入结点和在队列头部删除结点的功能。#include<iostream>#include<stack>using namespace std;template <typename T> class CQueue{public: CQueue(void); ~CQueue(void); void appendTail(const T& node); T deleteHead();private: stack<T> stack1; stack<T> stack2;};template 阅读全文
posted @ 2012-11-12 22:19 代码改变未来 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 1.替换空格%20题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。1.1分析将长度为1的空格替换为长度为3的“%20”,字符差的产度变长。如果允许我们开辟一个新的数组来存放替换空格后的字符串,那么这道题目就非常简 单。设置两个指针分别指向新旧字符串首元素,遍历原字符串,如果碰到空格就在新字符串上填入“%20”,否则就复制元字符串上的内容。但是如果面试官要求 在原先的字符串上操作,并且保证原字符串有足够长的空间来存放替换后的字符串,那么我们就得另想方法。如果从前往后替换字符串,那么保存在空格后面的字 阅读全文
posted @ 2012-11-10 21:57 代码改变未来 阅读(3621) 评论(0) 推荐(0) 编辑
摘要: 输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。我写的代码,已通过测试。复杂度比较高。#include<iostream>using namespace std;int ishuiwen(char *str,int n)//n为字符串长度{ char *s1=str,*s2=str+n-1;//s2指向末尾 int flag=0; while(*s1) { if(*s1==*s2) { if((s1==s2)||(s1+1==s2)){flag=1;break;} else {s1+ 阅读全文
posted @ 2012-11-01 23:20 代码改变未来 阅读(1084) 评论(0) 推荐(0) 编辑
摘要: 题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.”。我写的代码,已通过测试,复杂度高。#include<iostream>using namespace std;char *deletestr(char *str1,char *str2){ char *str=new char[strlen(str1)]; int i=0; while(*str1!='\0') { char *matchstr=str2;int flag= 阅读全文
posted @ 2012-10-27 23:57 代码改变未来 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 我们以三个字符abc 为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc 的排列。当两个字符bc 的排列求好之后,我们把第一个字符a 和后面的b交换,得到bac,接着我们固定第一个字符b,求后面两个字符ac 的排列。现在是把c 放到第一位置的时候了。记住前面我们已经把原先的第一个字符a 和后面的b 做了交换,为了保证这次c 仍然是和原先处在第一位置的a 交换,我们在拿c 和第一个字符交换之前,先要把b 和a 交换回来。在交换b 和a 之后,再拿c 和处在第一位置的a 进行交换,得到cba。我们再次固定第一个字符c,求后面两个字符b、a 的排列。既然我们已经知道怎么求 阅读全文
posted @ 2012-10-23 21:43 代码改变未来 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 定义字符串的左旋转操作:把前面若干个移动到尾部。如把字符串 abcdef左旋转 2位得到字符串 cdefab。请实现字符串左旋转的函数要求时间对长度为 n的字符串操作复杂度为 O(n),辅助内存为 O(1)。分析:把字符串看成有两段组成的,记位XY。左旋转相当于要把字符串XY 变成YX。我们先在字符串上定义一种翻转的操作,就是翻转字符串中字符的先后顺序。把X 翻转后记为XT。显然有(XT)T=X。我们首先对X 和Y 两段分别进行翻转操作,这样就能得到XTYT。接着再对XTYT 进行翻转操作,得到(XTYT)T=(YT)T(XT)T=YX。正好是我们期待的结果。#include<iostr 阅读全文
posted @ 2012-10-23 15:02 代码改变未来 阅读(314) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 下一页