编程珠玑第五章
来源:互联网 发布:网络直复营销理论类型 编辑:程序博客网 时间:2024/05/17 03:30
直接来习题吧
1、第一题可以看一下林锐的高质量C/C++编程
2、3、4、
5、第五题很明显不应该每次都用
for (i = 0; i < n - 1; ++i) assert(a[i] < a[i+1]);
如何利用二分的性质来进行处理还是一个问题。
一种办法是:
int bs(int *a, int b, int e, int v){int *begin = a + b, *end = a + e, *mid;if (!a || b >= e) return -1;while (begin < end){mid = begin + ((end - begin) >> 1);assert(*begin <= *mid && *mid <= *end);if (*mid > v) end = mid;else if (*mid < v) begin = mid + 1;else return mid - a;}return -1;}
但是这个方法需要多次使用才能检测出来,也就是可能在查找某两个数的时候不会报错,可能在查找别的几个数的时候就报错了。很多时候,这不是一种好选择。
根据第五题的题意,可以写如下代码来减少每次检测的量。
int bs(int *a, int b, int e, int v){int *begin = a + b, *end = a + e, *mid, i = b;static int *record = 0;if (!a || b >= e) return -1;if (!record || record != a){while (i < e && a[i] < a[i+1]) ++i;assert(i == e);}while (begin < end){mid = begin + ((end - begin) >> 1);assert(*begin <= *mid && *mid <= *end);if (*mid > v) end = mid;else if (*mid < v) begin = mid + 1;else return mid - a;}return -1;}
加一个static变量来记录这个数组是否经过检测,来决定以后的检测还需要进行。
当然对于多个数组的检测,可以利用hash来处理,因为一般来说,数组的下标地址都是不一样的。
7、8、9、略
- 编程珠玑第五章
- 编程珠玑第五章
- 【编程珠玑】第五章 编程小事
- 编程中的次要问题 --编程珠玑学习笔记 第五章
- 编程珠玑(2)第五章 学习笔记
- 编程珠玑第二版第五章习题(Java)
- 编程珠玑第二章
- 编程珠玑第三章
- 编程珠玑第四章
- 编程珠玑第六章
- 编程珠玑 15 章
- 编程珠玑第二章
- 编程珠玑第三章
- 编程珠玑第四章
- 编程珠玑第八章
- 编程珠玑第九章
- 编程珠玑第二章
- 编程珠玑第二章
- 基于TCP/UDP的应用层协议有那些
- 人工智能的研究领域
- java认证
- java上传下载基类
- 算法策略的总结
- 编程珠玑第五章
- 184页习题18
- java IO操作 (读写、追加、删除、移动、复制) 源码集合
- Android-- ArrayAdapter用法举例
- 《30天精通iPhone手机编程》-Day13-页面控制
- java创建文件夹,文件;删除文件夹,文件
- 人工智能传奇
- java删除文件夹
- 2003 技嘉送的鼠标