随笔分类 -  算法题

平时看到的写的算法题
摘要:bool isEven_(int n)//是否是偶数{ return (n&1)==0;}int gcd(int x, int y)//注意递归的基准情况和x,y同为偶数的情况{ if(x<y) { return gcd(y,x); } if(y==0) return x; //以上两步为递归算法中的基准情况!! if(isEven_(x)&&isEven_(y)) { return (gcd(x>>1,y>>1))<<1;//x>>1 x/2 }else if(isEven_(x)&&!isEve. 阅读全文
posted @ 2012-10-01 16:27 logzh 阅读(268) 评论(0) 推荐(0)
摘要:将一个很长的字符串,分割成一段一段的子字符串,子字符串都是回文字符串。有回文字符串就输出最长的,没有回文就输出一个一个的字符。例如:habbafgh输出h,abba,f,g,h。bool isPalindrome(const string& str,string::size_type i, string::size_type j)//判断是否回文{ if(i>str.length() || i>j || j>str.length()) { cout << "err!"; return false; } for( ;i<j;i++, 阅读全文
posted @ 2012-09-29 14:36 logzh 阅读(553) 评论(0) 推荐(0)
摘要:/*输出波峰波谷*/void printArrPeakValley(const int* arr, int len ){ // vector<int> iv(arr,arr+len); vector<int> result; result.push_back(iv[0]); int temp=iv[0]; int maxDis=iv[0]; vector<int>::size_type i=1; int flag=0; for(;i<iv.size();) { while(i<iv.size() && temp == i... 阅读全文
posted @ 2012-09-29 08:44 logzh 阅读(543) 评论(0) 推荐(0)
摘要:void test()/*百度:100个灯泡,第一轮所有灯泡打开,第二轮每隔一个灯泡关掉, 即排在偶数的灯泡都被关掉,第三轮每隔两个灯泡,将开着的灯泡关掉, 关掉的灯泡打开,依次类推,第100轮结束的时候还有几盏灯泡亮着*/{ bitset<101> b; b.set(); int count=2; int maxCount=100; int len=1; for(int i=count; i<=maxCount; i++) { len++; for(int j=0; j<b.size... 阅读全文
posted @ 2012-09-28 11:33 logzh 阅读(318) 评论(0) 推荐(0)
摘要://验证输入的表达式是不是正确的四则运算,不考虑负数bool isValidExpression(const string& expression){ stack<char> s; vector<char> v; for(int i=0; i<expression.size(); i++) { switch(expression[i]) { case '(': s.push('(');//'('入栈 break; case ')': if(s.emp... 阅读全文
posted @ 2012-09-28 11:32 logzh 阅读(691) 评论(0) 推荐(0)
摘要://输出字符串中所有最长的无重复字符的子字符串void allMaxChildNoRepeatCharacter(const string& str){ string s=str; vector<int> ia(2); int len=0;//记录当前最长的无重复字符的子字符串 for(int start=0,end=1; end<s.length(); end++) { for(int i=start; i<end; i++) { if(s[i]==s[end]) { ... 阅读全文
posted @ 2012-09-27 17:28 logzh 阅读(530) 评论(0) 推荐(0)
摘要:找出两个单链表里交叉的第一个元素解法:分别遍历list1、list2,计算得到L1,L2;比较最后结点是否相等,相等则表明是两个链表是交叉的如果交叉:长的链表先移动|L1-L2|步,再逐个比较,等到第一个交点! 阅读全文
posted @ 2012-09-18 11:24 logzh 阅读(1080) 评论(0) 推荐(0)
摘要:链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->gLNode* ReverseLinkList3(LNode* head){ if(head == NULL) return head; LNode* p; LNode* temp; LNode* trail=head; while(trail->next !=NULL && trail->next->next != NULL) { //防止无限循环,在测试是设置一个循环标记位! p=tra 阅读全文
posted @ 2012-09-18 10:51 logzh 阅读(633) 评论(0) 推荐(0)
摘要:删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个 1 string test(string s) 2 { 3 string ns; 4 int flag=0; 5 int count=0; 6 for(int i=0; i<s.length(); i++) 7 { 8 if(flag==0 && s[i]==' ')//删除字符串首空格 9 {10 continue;11 }12 13 if(s[i] != ' ')//不是空格14 ... 阅读全文
posted @ 2012-09-18 09:36 logzh 阅读(1096) 评论(0) 推荐(0)