
100题
文章平均质量分 69
u013322907
这个作者很懒,什么都没留下…
展开
-
寻找和为定值的两个数
//输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。//要求时间复杂度是 O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。//例如输入数组 1、2、4、7、11、15 和数字 15。由于 4+11=15,因此输出 4 和 11#include using namespace std; //直接穷举法void find1(int a[],in原创 2014-07-24 15:49:21 · 398 阅读 · 0 评论 -
判断字符串中的括号是否匹配
#include #include #include using namespace std;stack st;int Check(char *p){ int len=strlen(p); for(int i=0;i<len;i++) { if(p[i]=='('||p[i]=='['|| p[i]=='{')//是左括号的入栈 { st.push(p[i]);原创 2014-07-15 10:34:52 · 3124 阅读 · 0 评论 -
用C++语言实现,将一句话中的单词进行倒置(单词之间倒转,单词本身不倒置),标点符号不导致。比如一句话“I come from tianjin. “,倒置后变成“tianjin. from come
用C++语言实现,将一句话中的单词进行倒置(单词之间倒转,单词本身不倒置),标点符号不导致。比如一句话“I come from tianjin. “,倒置后变成“tianjin. from come I ”。步骤:1、原创 2014-07-14 14:14:21 · 1349 阅读 · 0 评论 -
约瑟夫问题
输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数1,计数到m后,将数列该位置数值替换计数值m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序比如: 输入的随机数列为:3,1,2,4,初始计数值m=7,从原创 2014-07-14 22:00:25 · 407 阅读 · 0 评论 -
输入n,m,从1-n个数字里输出和为m的组合
利用动态规划法,#include #include using namespace std; vector result;void find(int n,int m){ if(n<0||m<0) return; if(m==0) { for(vector::iterator i= result.begin();i!=result.end();i++) {原创 2014-09-19 16:27:35 · 1420 阅读 · 0 评论 -
O(n)实现替换空格
题目:请实现一个函数,把字符串中的每个空格替换成原创 2014-08-26 19:02:22 · 469 阅读 · 0 评论 -
两个单向链表,找出它们的第一个公共结点。
题目:两个单向链表,找出它们的第一个公共结点。链表的结点定义为:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率相当高。如果两个单向链表有公共的结点,也就是转载 2014-08-01 17:02:43 · 1980 阅读 · 0 评论 -
字符串消除连续出现3次及以上的字符
字符串消除连续出现3次及以上的字符原创 2014-08-14 15:31:40 · 4674 阅读 · 1 评论 -
一个数组中,存在两个只出现一次的数字,其余的数字均出现两次。要求在时间复杂度o(n),空间复杂度为o(1)的情况下找出这两个数字
一问题描述 一个数组中,存在两个只出现一次的数字,其余的数字均出现两次。要求在时间复杂度o(n),空间复杂度为o(1)的情况下找出这两个数字。 二 问题分析 此题实际考察了,对位操作的理解。首先进行简化,考虑只有一个数组中,只存在出现了一次的一个数字,其余数字在数组中出现两次,试 找出这个数字。 三 解决方案 首先 回忆 异或操作,任意数转载 2014-08-01 16:10:23 · 1051 阅读 · 0 评论 -
用递归颠倒一个栈
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。分析:乍一看到这道题目,第一反应是把栈里的所有元素逐一pop出来,放到一个数组里,然后在数组里颠倒所有元素,最后把数组中的所有元素逐一push进入栈。这时栈也就颠倒过来了。颠倒一个数组是一件很容易的事情。不过这种思路需要显示分配一个长度为O(n)的数组,原创 2014-08-14 20:48:47 · 337 阅读 · 0 评论 -
字符串压缩(华为)
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。 2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。要求实原创 2014-08-12 09:32:14 · 843 阅读 · 1 评论 -
把数组排成最小的数
题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字 32132。请给出解决问题的算法,并证明该算法。 思路:先将整数数组转为字符串数组,然后字符串数组进行排序,最后依次输出字符串数组即可。这里注意的是字符串的比较函数需要重新定义,不是比较a和b,而是比较ab与 ba原创 2014-08-15 10:11:50 · 329 阅读 · 0 评论 -
对称字符串的最大长度
题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出 4。1、比较笨的方法是:从原创 2014-08-15 16:52:49 · 577 阅读 · 0 评论 -
算法-求二进制数中1的个数
算法-求二进制数中1的个数原文:http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html问题描述任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介转载 2014-08-17 11:27:24 · 353 阅读 · 0 评论 -
O(n)算法得到数组中任意第k大的数字
利用快速排序zho原创 2014-08-31 14:35:35 · 2932 阅读 · 0 评论 -
在从1到n的正数中1出现的次数
在从1到n的正数中1出现的次数http://blog.youkuaiyun.com/ysu108/article/details/7952455题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。两种方法,一种从1到n一个个的计算,另外一种是用转载 2014-09-01 20:32:05 · 504 阅读 · 0 评论 -
打印螺旋数组
#include #include #include #include #include #include using namespace std;void print(int **num ,int row,int col,int start){ int endX=col-1-start; int endY=row-1-start; //→ cout<<"→"<<end原创 2014-10-12 14:41:20 · 376 阅读 · 0 评论 -
合并两个有序链表
分两种:1、申请额外空间;2、原创 2014-10-13 15:46:39 · 420 阅读 · 0 评论 -
输入 n 个整数,输出其中最小的 k 个—7种方法实现
输入 n 个整数,输出其中最小的 k 个原创 2014-07-23 16:45:10 · 7958 阅读 · 0 评论 -
计算两个数的最大公约数和最小公倍数
1、计算[a,b最大公约数比较笨的方法是:原创 2014-07-22 15:10:57 · 602 阅读 · 0 评论 -
判断栈的pop是否正确
题目:输入两个整数序列。其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序。原创 2014-07-31 15:30:44 · 690 阅读 · 1 评论 -
第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符,并输出它在字符串中的。如输入 abaccdeff,则输出 b。原创 2014-07-27 16:47:35 · 321 阅读 · 0 评论 -
判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回 true,否则返回 false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:8/ \6 10/ \ / \5 7 9 11因此返回 true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回 false。原创 2014-07-29 21:24:35 · 619 阅读 · 0 评论 -
全排列
题目:输入一个字符串,打印出该字符串中字符的所有排列。原创 2014-07-26 15:41:16 · 341 阅读 · 0 评论 -
输入字符串,找出相同且长度最长的子字符串,输出
#include #include using namespace std;void main(){string str,tmp;coutcin>>str;int len=str.length();int L=len;int i=0;int f,b;while(L>0){for(i=0;i+L-1{tm原创 2014-07-14 11:02:16 · 743 阅读 · 0 评论 -
跳台阶
题目:一个台阶总共有 n 级,如果一次可以跳 1 级,也可以跳 2 级。求总共有多少总跳法,并分析算法的时间复杂度。我们把 n 级台阶时的跳法看成是 n 的函数,记为 f(n)。当n>2 时,第一次跳的时候就有两种不同的选择:一是第一次只跳 1 级,此时跳法数目等于后面剩下的 n-1 台阶的跳法数目,即为 f(n-1);另外一种选择是第一次跳 2 级,此时跳法数目等于后面剩原创 2014-07-27 10:48:04 · 272 阅读 · 0 评论 -
【转】大数四则运算的C++实现
http://blog.youkuaiyun.com/yzl_rex/article/details/6943020大数四则运算的C++实现[摘要] 大数运算不仅仅运用在密码学中,还运用在一些物理学研究、生物学,化学等科目中。大数运算,意味着参加的值和计算结果通常是以上百位数,上千位数以及更大长度之间的整数运算。例如大家所熟知圆周率π的值,在一般的数值计算中用到圆周率的不须要多转载 2014-07-16 19:52:38 · 425 阅读 · 0 评论 -
中缀式转后缀式
栈底放‘#’,用来标记栈底,从左至右逐字读取中缀式: a.当当前字符为数字时,直接输出; b.当当前字符为"("时,将其压栈; c.当当前字符为")"时,则弹出堆栈中最上的"("之前的所有运算符并输出,然后删除堆栈中的"(" ; d.当当前字符为运算符时,则依次弹出堆栈中优先级大于等于当前运算符的(到"("之前为止),输出,再将当前运算符压栈; 即:当前运算符大于栈顶运算原创 2014-07-16 10:34:33 · 473 阅读 · 0 评论 -
旋转字符串
1、#include #include #include using namespace std; void shift1(char *s,int n){ int len=strlen(s); char tmp; for(int i=0;i<n;i++) { tmp=s[0]; for(int j=0;j<len-1;j++) {原创 2014-07-22 16:47:55 · 398 阅读 · 0 评论 -
用bitmap解决海量电话号码统计问题
原文:http://blog.youkuaiyun.com/chris820313/article/details/6795561为准备某几个大公司的笔试,看到这样一个问题:已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。我所拜读的材料里提到了用bitmap解决这种问题,也就是说:每一个电话号码被映射到了不同的位。例如:6123456转载 2014-07-25 20:06:40 · 3456 阅读 · 0 评论 -
奇偶调序问题
1、输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为 O(n)。原创 2014-07-27 15:11:14 · 440 阅读 · 0 评论 -
从尾到头输出链表、字符串;不声明变量计算字符串长度
接下来的想法是从头到尾遍历链表, 每经过一个结点的时候, 把该结点放到一个栈中。 当遍历完整个链表后,再从栈顶开始输出结点的值,此时输出的结点的顺序已经反转过来了。 该方法需要维护一个额外的栈,实现起来比较麻烦。既然想到了栈来实现这个函数, 而递归本质上就是一个栈结构。 于是很自然的又想到了用递归来实现。 要实现反过来输出链表, 我们每访问到一个结点的时候, 先递归输出它后面的结点,再输出该结原创 2014-07-31 22:22:52 · 464 阅读 · 0 评论 -
输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是 O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组 1、2、4、7、11、15 和数字 15。由于 4+11=15,因此输出 4 和 11。原创 2014-07-30 15:08:39 · 4848 阅读 · 0 评论 -
两个栈实现队列;两个队列实现栈
思路:s1是入栈的,s2是出栈的。 入队列时:直接压入s1即可 出队列时:如果s2不为空,把s2中的栈顶元素直接弹出;否则,把s1的所有元素全部弹出压入s2中,再弹出s2的栈顶元素原创 2014-07-31 19:34:19 · 338 阅读 · 0 评论 -
01背包问题,是用来介绍动态规划算法最经典的例子
转自:http://blog.youkuaiyun.com/mu399/article/details/772281001背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j]原创 2014-09-19 20:35:33 · 1153 阅读 · 0 评论 -
01背包问题
1、回溯法解决原创 2014-09-19 18:51:59 · 379 阅读 · 0 评论 -
打印和为s的连续正数序列
输入一个正数,d#include#includeusing namespace std;void find(const int sum){ if(sum<3) return; int small=1; int big=2; int mid=(sum+1)/2; int cur=small+big; while(small<mid) { if(cur原创 2014-09-06 21:09:52 · 307 阅读 · 0 评论 -
输出1到最大的N位数
输出1到最大的N位数原文:算法一:最直观的算法,求出最大的n位数是多少,然后一个循环打印。[cpp] view plaincopyvoid Print1ToMaxOfNDigits1(int n) { int number=1; int i=0; while(i++转载 2014-08-14 16:48:14 · 330 阅读 · 0 评论