笔试/面试
小明湖畔
这个作者很懒,什么都没留下…
展开
-
T(n) = 25T(n/5)+n^2的时间复杂度
对于T(n) = a*T(n/b)+c*n^k;T(1) = c 这样的递归关系,有这样的结论: if (a > b^k) T(n) = O(n^(logb(a)));logb(a)b为底a的对数 if (a = b^k) T(n) = O(n^k*logn); if (a a=25; b = 5 ; k=2 a==b^k 故T(n)=O(n^k*logn)=O(n转载 2015-03-04 08:34:48 · 700 阅读 · 0 评论 -
长度为n的整数数组,找出其中任意(n-1)个乘积最大的那一组,只能用乘法,不可 以用除法。要求对算法的时间复杂度和空间复杂度作出分析,可以写思路也可以写程序。
法一: 时间空间复杂度都为O(n) s1[i]:从前往后遍历到i位置的乘积(0 s2[j]:从后往前遍历到j位置的乘积(0 最后遍历一遍找出s1[k+1]*s2[k-1]的最小值(0 法二: 设这n个数的乘积为P 当P=0时,除去n个数中的一个0,计算剩下的数的乘积,记为Q: 当Q=0时,说明n个数中至少有两个0,不管怎么组合,转载 2015-03-04 09:28:12 · 3012 阅读 · 0 评论 -
求数组的子数组之和的最大值
int MaxSum2(int *A, int n) { int nStart = A[n-1]; int nAll = A[n-1]; for(int i = n-2;i>=0;--i) { if(nStart<0) nStart = 0; nStart += A[i]; if(nSt转载 2015-03-04 09:49:52 · 351 阅读 · 0 评论 -
printf("%d,%d\n", *ptr, *(++ptr))
#include int main(){ int arr[] = { 6, 7, 8, 9, 10 }; int *ptr = arr; *(ptr++) += 123; printf("%d,%d\n", *ptr, *(++ptr)); return 0; } 程序运行结果 : 8,8 解释: ①*(ptr++) += 123这句代码中,使用了后++ 所以效果相当于:原创 2015-03-04 17:59:20 · 2417 阅读 · 0 评论 -
关于printf参数字节数的研究
#include void main(void){ unsigned int a = 0xFFFFFFF7; unsigned char i = (unsigned char)a; char *b = (char *)&a; printf("%08x,%08x", i, *b); } 有一道面试题是这样的,正确的答案是:000000f7,fffffff7 我们是这个样子呢,我们来原创 2015-03-04 20:05:32 · 716 阅读 · 0 评论 -
浮点数的二进制表示
转自:http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html 作者: 阮一峰 日期: 2010年6月 6日 1. 前几天,我在读一本C语言教材,有一道例题: #include void main(void){ int转载 2015-03-04 18:14:03 · 359 阅读 · 0 评论