网站百度百科,山西seo推广方案,全屋整装家装,四川南充房产网整数二分
整数二分通常用于在有序整数序列中查找特定元素或满足条件的边界值。其核心在于通过调整左右边界逐步缩小搜索范围#xff0c;直到找到目标。
模板示例#xff08;查找左边界#xff09;#xff1a;
int binary_search_left(int l, int r) {while (l r) {…整数二分
整数二分通常用于在有序整数序列中查找特定元素或满足条件的边界值。其核心在于通过调整左右边界逐步缩小搜索范围直到找到目标。
模板示例查找左边界
int binary_search_left(int l, int r) {while (l r) {int mid l (r - l) / 2;if (check(mid)) r mid;else l mid 1;}return l;
}模板示例查找右边界
int binary_search_right(int l, int r) {while (l r) {int mid l (r - l 1) / 2;if (check(mid)) l mid;else r mid - 1;}return l;
}关键点
循环条件通常为 l r退出时 l r。计算 mid 时需注意整数溢出问题建议使用 l (r - l) / 2。左边界模板中mid 不加1且 r mid、l mid 1。右边界模板中mid 加1防止死循环且 l mid、r mid - 1。 实数二分
实数二分用于求解连续函数或浮点数问题通过设置精度要求逐步逼近答案。与整数二分的主要区别在于终止条件和步进方式。
模板示例
double binary_search_real(double l, double r) {const double eps 1e-6; // 精度根据需求调整while (r - l eps) {double mid (l r) / 2;if (check(mid)) r mid;else l mid;}return l;
}关键点
循环条件为区间长度大于精度阈值如 eps 1e-6。mid 计算无需考虑整数问题直接取平均值。调整边界时直接赋值 l mid 或 r mid无需加减步长。若问题要求更高精度可调整 eps 或改用固定迭代次数如循环100次。 注意事项
整数二分需特别注意边界条件避免死循环或漏查。实数二分的精度选择需平衡效率与准确性过高精度可能导致超时。两种二分均要求问题具有单调性或局部单调性否则无法直接应用。