你首先需要|

2c237c6

园龄:1年4个月粉丝:2关注:0

ACM题解Day2|二分查找总结

二分查找

可以使用C++的库函数:

binary_search(arr.begin(),arr.end(),target) 用于判断元素是否在数组内

lower_bound(arr.begin(),arr.end(),target) 用于查找大于等于该元素的第一个元素,返回迭代器 减去 arr.begin() 即是数组下标

同理 upper_bound(arr.begin(),arr.end(),target) 查找第一个大于 target 的元素同样返回迭代器同样操作

正常二分查找 (整数二分)

int l = 0, r = n - 1;
while (l < r) {
    int mid = (r - l) / 2 + l;
    if (a[mid] > target) {
        r = mid - 1;
    } else if (a[mid] < target) {
        l = mid + 1;
    } else {
        l = mid;
        break;
    }
}
std::cout << l << std::endl;

问题二分查找的左开右闭, 与闭区间的区别?

二分答案

模版

ll l = 0, r = LLONG_MAX;
whil(l + 1 < r) {
    ll mid = (l + r) >> 1;
    if (cheak(mid)) {
        l = mid; // 最后满足条件位置
    } else {
        r = mid - 1
    }
}
std::cout << l << std::endl;

浮点二分

while(r-l>1e-5) //需要一个精度保证
	{
		double mid = (l+r)/2;
		if(check(mid)) l=mid; //或r=mid;
		else r=mid; //或l=mid;
	}

二分答案题

可凑成的最大花束数

本文作者:2c237c6

本文链接:https://www.cnblogs.com/27dCnc/p/18568608

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   2c237c6  阅读(8)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起