文章分类 -  [C/C++]

Foucs on the C/C++ language .
摘要:如题:题有很多变种:1.第一种 将一个有序数组循环移位K位后,最少要几个数就可以判断原数组的增减性解答:将三个数假定为是abc,如果大小关系为[bac,acb,cba]可以知道原数组是递增的.反之为递减2.在一个已知循环移位的有序数组上查找原数组的开始位置【根据1中方法判断递增或者递减】解答:【假如是递增】采用二分搜索的方法,每次搜索的时候将当前的值和[low]低端的值进行比较判断处于哪一边 如果... 阅读全文
posted @ 2010-09-28 14:45 David Luo 阅读(4076) 评论(0) 推荐(1)
摘要:一个整数序列(n为多少不知道),要你从中随机取出k个数,每个数被选中的概率一样:答案是前K个数放入k大小的数组,当前如果是K+1个数用(k/k+1)概率选中 并和前K个数组中的元素随机替换。同理当选择K+2。。。。n的情况证明如下:数学归纳法当n=K+1时:  第K+1个数选中的概率是(K/K+1)  第一个数选中的概率为 (1/K+1) + (K/K+1)*(1 - K/K+1) = (K/K+... 阅读全文
posted @ 2010-09-19 23:51 David Luo 阅读(2978) 评论(0) 推荐(1)
摘要:对一个有限态状态机来说:对应有一个开始状态和一个结束状态:如:状态机共有三个状态 A B C 。END为结束状态。其中A为初始状态, 状态之间存在状态转移的概率。如P(A->B) = a 等。。如果在状态机上随机游走的话,就会有一个状态序列,如 AABCBA等...问,状态序列为n时候的概率是多少?此题做的方法有两种:1。直接用递归枚举所有的长度为n状态序列,并把所有可能的序列加起来。2。d... 阅读全文
posted @ 2010-09-16 17:41 David Luo 阅读(403) 评论(0) 推荐(0)
摘要:统计数字问题,见李晓东《计算机算法设计与分析》1-1。题意为。给定一个数N求从1到N的这N个数中0,1,2,3,4,5,6,7,8,9这10个数字出现的次数:同时所有的数字没有前导的0。 如6要写成6而不是 006 ,06这种形式。 举例子: 数字 1011 代表1出现3次 0出现1次。。《编程之美》上也有求1的个数。不过1比较特殊。李的题是求所有的数字出现的次数分析如下:这个分析同《编程之美》但... 阅读全文
posted @ 2010-09-01 21:55 David Luo 阅读(1331) 评论(2) 推荐(1)
摘要:这个题的解法:可以先通过排序得到第K个数即是第K大数。第二种解法就是利用快速排序的partition,这是一种随机算法,最坏情况下是n平方的,但是 平均情况下是 线性的。代码如下:[代码]3。 第三种方法可以采用算法导论上的SELECT算法。4。当然 还可以通过插入排序。或者堆都可以弄出来.. 阅读全文
posted @ 2010-08-24 17:40 David Luo 阅读(373) 评论(0) 推荐(0)
摘要:如题目所示:首先可以选的就是枚举从1到N 然后判断是否是素数,复杂度是 N的.还有一种方法是 厄拉多塞篩法 描述 如下:从 1到N 如果找到一个数 a是素数,那么将2*a 3*a .....M*a (M*a<N)全不剔除。一直到没有剔除为止:这样剩下的数就都是素数了。一個大於1的整數,如果除了它本身和1以外,不能被其他正整數所整除,這個整數就叫質數質數也叫素數,如2、3、5、7、11、13&... 阅读全文
posted @ 2010-08-24 12:39 David Luo 阅读(2279) 评论(0) 推荐(2)
摘要:给定通配符*表达的意思是匹配0个或多个任意字符。如abc* 匹配的字符串为以abc开头的任意字符串..实现函数bool match(char* p,char*s)其中p为模式串(含*)s为匹配串,按照题意判断二者是否匹配,如果匹配返回true,不匹配返回false思路:1。 递归,枚举*代表的字符数目,从0到n,然后用递归解决:[代码]递归解的实现比较直观,但是复杂度比较大估计到了n平方到n立方之... 阅读全文
posted @ 2010-08-23 23:12 David Luo 阅读(5021) 评论(0) 推荐(0)
摘要:记得以前学C的时候老喜欢考 ++ 操作符,公司笔试面试题也出现过在此提供一些题:我个人的理解放在最后} //运行结果是18,理解:1. ++在前的意思是“先加后用”,这里蕴含的意思是说,只要遇到++在前那么马上将内存中的变量加一,++在后的意思是”先用后加“这个“后加”的意思是语句结束(分号为语句结束)后才加,没结束 是内存中... 阅读全文
posted @ 2010-08-23 20:44 David Luo 阅读(1767) 评论(1) 推荐(2)
摘要:假如要求N个字符的全排列,N个字符的集合为S={C1, C2,...,Cn}1.对于递归的情况,令去掉第i个字符后的集合为Si=S-{Ci},那么集合S的全排列FullPermutation(S)为:C1+FullPermutation(S1)C2+FullPermutation(S2)...Cn+FullPermutation(Sn)加号"+"表示字符连接,显然递归的结束条件是集合中只有一个字符... 阅读全文
posted @ 2010-08-18 21:33 David Luo 阅读(717) 评论(0) 推荐(0)
摘要:中序遍历:遇到一个节点后将返回值置为1, 如果左右子树返回值都是1那么这就是一个公共祖先,最近就是第一个,做一个标志位判断一下就可以了代码如下:[代码]最近想算法想得头晕 ,是不是不太适合搞代码?哎码工的无奈啊 阅读全文
posted @ 2010-08-16 11:08 David Luo 阅读(248) 评论(0) 推荐(0)
摘要:此算法是动态规划中的经典:LCS即求数组 a b 中最长的公共子序列,其中序列不一定要相邻 。用动态规划解有两种,一种是正着解,一种是倒着解,即备忘录法贴下我写的代码:[代码] 阅读全文
posted @ 2010-08-15 22:00 David Luo 阅读(253) 评论(0) 推荐(0)
摘要:最长递增之序列简称:LIS是一道很经典的算法题,问题定义如下给定一个无序的数组,找出长度最长的单调递增的子序列(不一定要相邻)解法可以采用动态规划,有两种方法:1.将源数组a 排序得到另一个数组b,然后在这两个数组中求LCS即(最长公共子序列)复杂度为 nlogn + n22.将源数组a直接采用动态规划,递推式很简单,如果第k位加入数组中,那么以k结尾的子序列的长度可以由(0。k-1)递推出来,即... 阅读全文
posted @ 2010-08-15 20:43 David Luo 阅读(362) 评论(0) 推荐(0)
摘要:大学的时候记得最难得就是这个弗洛伊德了,记得考研的时候看到这个三重循环,我直接放弃,然后对自己说“这种变态算法基本不考”上研了也见了世面了。知道DP,在这里汗本科时候的算法课...最近由于找工作 于是就复习了下算法,参考了《算法导论》发现弗洛伊德是DP的一种应用 其实比较简单弗洛伊德算法是求解图的多源最短路径的。具有重叠子问题结构为:Floyd-Warshall算法(Flo... 阅读全文
posted @ 2010-08-14 23:41 David Luo 阅读(29000) 评论(0) 推荐(4)
摘要:此题面试时常有:解答方法有以下三种:1。 直接迭代求解,这个很简单,复杂度O(n)。1。 分治法。复杂度 logn 此方法有点凹,原理是:a的n次方可以分别对应两种情况: 1。 n为偶数 那么 an= (a*a)n/2 2。n为奇数 那么an= a*an-1代码如下:[代码]3.此方法复杂度为 n的二进制表示中最高位1的index原理为:事先建立a的 2m m为(0,x);的表... 阅读全文
posted @ 2010-08-14 17:41 David Luo 阅读(1765) 评论(0) 推荐(0)
摘要:归并排序想法很简单,和分治有点像 复杂度是 O(nlogn)空间复杂度O(N)归并排序是稳定排序 在大规模信息处理外排序中用得比较多,如多路归并败者树。练习手写了下归并排序,犯了n多错,都是很傻得错,下次写代码前一定要想清楚..[代码]利用归并排序 我们还可以求逆序对的个数。如果定义从小到大是正序的话,所谓逆序对就是指,在数组中s[i]>s[j] 其中 i<j 的对数的个数。。利用归并... 阅读全文
posted @ 2010-08-14 15:30 David Luo 阅读(885) 评论(0) 推荐(0)
摘要:看了到面试题:将正方形分成16份,将1到16填入其中。让行和列都是从大到小。问一共有多少种方法?此题 解法有:1。 穷举,基本不用考虑 复杂度O(16!)。2。 枚举+剪枝 。代码如下:得到答案是 240243。个人觉得 有简单方法 再想想方法2 代码如下[代码] 阅读全文
posted @ 2010-08-13 23:26 David Luo 阅读(1195) 评论(0) 推荐(0)
摘要:代码如下。包含测试代码原理就是:枚举二进制余数中1的位置 +二分搜索。O(32*32)不过此算法可以加上两重的二分搜索。时间复杂度会更优。[代码]另附上同样解法的简洁的代码[代码] 阅读全文
posted @ 2010-08-11 11:48 David Luo 阅读(1013) 评论(0) 推荐(0)
摘要:看了《Inside c++ object model》 想到一个题目:#include <iostream>using namespace std;class A{virtual void f(){};};class B : public virtual A{ virtual void f(){};};class C: public virtual A{virtual void f()... 阅读全文
posted @ 2010-08-04 11:53 David Luo 阅读(1083) 评论(0) 推荐(0)
摘要:最近项目中要将文档标题写入oracle数据库,编码是UTF8的,老报 字符串未正确结束这个错。 ORA-01756:括号内的字符串没有正确结束。客户端,服务器的NLS_LANG都正确设置为了UTF8.将标题按照自己的顺序输出,我一个一个字符编码去查,发现标题后面多了一个'E5'字节。这个是一个三字节UTF8编码的前缀,后面没有后续字节了,ORACLE当然报错。。在公布解决方法前,复习下UTF8编... 阅读全文
posted @ 2010-07-27 23:17 David Luo 阅读(1992) 评论(0) 推荐(0)
摘要:一道面试题:程序代码如下: float a1=1.0f; float b1=0.0f; cout<<boolalpha<<"boolalpha:"<<((int)a1==(int&)a1)<<endl; cout<<boolalpha<<"boolalpha:"<<((int)b1==(int&am... 阅读全文
posted @ 2010-07-21 22:54 David Luo 阅读(759) 评论(0) 推荐(0)