最长公共子序列问题: 给定2个字符串,求其最长公共子串。如abcde和dbada的最长公共字串为bd。 动态规划:dp[i][j]表示A串前i个和B串前j个的最长公共子串的长度。 则 若A[i] == B[j] , dp[i][j] = dp[i-1][j-1] + 1; 否则 dp[i][j] = max(dp[i-1][j],dp[i][j-1]); 时间复杂度O(N*M)。 d
给定一个rand7()函数可以生成1-7的随机数,如何通过rand7()函数构造出rand10()函数,使得rand10()函数可以生成1-10的随机数(显然要求概率平均)。 这道题是个概率问题。 显然一次rand7()不行。 2次可生成1-49的均匀随机数。 取其中10个即可。 即 int a = rand7() , b = rand7() ; while( a * 7 + b &
神奇的一行。 while(a%=b^=a^=b^=a); b^=a^=b^=a即交换a和b的值。 等价于:b^=a; a^=b; b^=a; 最后a和b的最大公因数为b。 附部分代码: int a , b ; while(~scanf("%d%d",&a,&b)) { &nb
单链表的基本操作:建立,求长度,打印,删除,插入,排序,逆置。 没什么好说的=。= 上代码 #include <stdio.h> #include <ctype.h> #include <string.h> #include <iostream> &nb
经典问题: 2个栈模拟1个队列。 栈:先进后出。 队列:先进先出。 在push的时候,通过另一个栈将序列翻转一下即可将该栈从栈顶到栈底满足先进的在更上面的位置。 附代码如下: #include <stdio.h> #include <ctype.h> #include <iostream
已经大三下了,本学期忙了各种没要紧的事情,却没什么太大的收获。三四月份一直在忙着找暑假的实习,结果直到现在也没找到= =因为有事,华为的二面就放弃了,百度也悲剧在二面上了,总的来说是因为基础太差!一直懒得复习这些基础的东西。不过真心喜欢百度的面试风格,一上来就上题,感觉真好。之前的一年在acm上花的时间太多了,却因为错过了最佳的进校队的时机,一直被边缘化,在算法上也没有太大的斩获。。
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号