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;
	}

二分答案题

可凑成的最大花束数

posted @ 2024-04-09 19:52  2c237c6  阅读(41)  评论(0)    收藏  举报  来源