相信大家在各处都看到了很多关于二分查找的模板,我在阅读了众多二分查找的模板后,发现了一个最好理解也是最好用的模板,原创来自于b站的五点七边,如果想要进一步了解的话可以去b站看视频,我这里就简单阐述一下思路以及举几道例题分析。
模板思路:我们可以将需要进行二分查找的数组看成一片领域,然后左右两个指针看做成两头老虎,他们要根据所给的条件不断分割这片领域,直到最后这个领域正好被分成两头老虎各自的领域。最后退出循环的时候,左老虎在自己领域的最右边,右老虎在自己领域的最左边,且它们俩彼此相邻。
模板写法:
//左边界值为设置为-1,右边界设置为数组的大小
int left = -1, right = nums.size();
//循环条件
while ( left + 1 != right )
{
//二分查找的mid值
int mid = ( left + right ) / 2;
//更新领域,使数组最后变成左右两个领域
if ( 左领域 )
{
//更新左右指针
left = mid;
}
if ( 右领域 )
{
//更新右指针
right = mid;
}
}
//看要求的结果在哪个领域即返回哪个值
return left/right;