一,二分答案类型
二分,我们常用的就是用它来查找某些东西,但是我们也可使用这种简单的算法来完成,一些答案的检索,二分答案实际上就是一种遍历的方法,你可以理解为他是一种时间复杂度位O(log2n) 的一种遍历方式,首先我们道的是他也是使用一个范围的数据进行遍历,也就是说在使用这个算法的时候,我们要首先的知道这个答案的数据范围,然后我们要写一个检验方式,来完成这个数据的检验操作,只要整个算法的时间复杂度不超过O(nlog2n) 就能正常运行,一般数据情况下。
二分答案我们也有相关的模板,他整个查找正确值的操作,实际上是和二分查找类似的,感兴趣的话可以先了解一下二分查找再完成二分答案的学习。
二,二分答案代码
二分答案是相对比较简单的,我们把二分答案的代码划分成两个部分,一个部分就是专门的板子搜索,另一部分就是,相对有特性的 check 检查函数
1,板子搜索函数
#include <iostream>
using namespace std ;
int bsearch_1 (int l ,int r )
{
while ( l < r)
{
int mid = ( l + r ) >> 1 ;
if(chech(mid))//检查条件要为成立的时候
r = mid ;
else
l = mid + 1 ;
}
return r ;
}
//前缀二分答案: 完成之后我们再看一下是,后缀的,也就是每次遍历之后都把l确定的代码
int bsearch_2 (int l , int r )
{
while ( l < r )
{
int mid = ( l + r + 1 ) >> 1 ;
if(check (mid )) l = mid ;
else r = mid - 1 ;
}
return l ;
}
int main ()
{
//完成数据的输入输出
//最后导入数据的范围
return 0 ;
}
我们在板子搜索中理解到了一些东西,当我们在搜索中整个区间我们不是很确定的时候,我们可以把整个区间开大一点,最后我们也能取到,当然我们这些数据一定要有顺序性,这样我们才能使用二分答案的思路来进行求解。
2,check 函数
check 函数是一个检验的函数,这个函数才是解题的关键,有较强的自主性,按照题目来写。