二分法
来源:互联网 发布:进入mysql控制台命令 编辑:程序博客网 时间:2024/06/08 08:59
0
1
2
3
4
5
6
7
8
9
1
4
5
7
8
12
32
43
55
231
二分查找的先决条件:
结点按关键字有序,且顺序存储,就是找一个区间,往这个区间里面试数
(前缀和,距离,长度)
二分思想:取中比较
二分关键词:至少,最多,最小等限制词
问题:在数组a中找一个不大于m的最大数ansint a[M];定义数组大小Int n, m;定义数组大小与要查询的数int left, right, mid;定义边界与中点left = 0, right = n-1;//定义边界时要注意度while(left <= right)//退出循环的条件{mid = (left + right) / 2; //或者(left + right) << 1 if(solve(mid) /*判断方案*/ ){ans = a[mid];//答案存放点left = mid + 1;//满足之后往右走一步,因为左边的都已经满足条件,且已经存入答案,放弃}else{right = mid - 1;//不满足的时候往左走一步,因为右边的都不满足条件,放弃}}
另外 两个函数 upper_bound() lower_bound() 点击打开链接
下面是偷得大佬的
首先如果是整数。。。则有如下技巧。。。首先由4个变量。。le,ri,mid,ans。。。
首先控制结束。。。为(le<=ri)!!!
然后更新的时候结果到底输出什么??
用ans保存可行的mid,不断更新。。最后要求的值就在ans里面。。。(ps:因为ans已经代表了当前le和ri的最好的情况。。)
然后就是左右边界的确定。。。
整数为:
选右区间:l=mid+1;
选做区间:r=mid-1;
ans=mid,保存解。。。
整数处理是最坑的,浮点数无非是精度问题。。。。
浮点数的边界控制为(ri-le>eps)
选右区间:l=mid;
做左区间:ri=mid;
最后结果输出mid值。。。。
阅读全文
0 0
- 二分法~~
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- <Python> Numpy中的矩阵乘法问题
- tomcat服务器安装和启动
- 浅析Java 字节码
- HDU6053(莫比乌斯)
- 再看 唯一分解定理 UVA Choose and divide
- 二分法
- 窗体介绍
- 拖放API中的drag和drop实战
- UVA-12657 Boxes in a Line(数据结构)
- 初学java--类型转换介绍
- 剖析 Linux hypervisor
- POJ2406 Power Strings 解题报告【字符串】【KMP】
- java 堆栈应用一 十进制转M进制
- FastDFS安装配置