首页 > 代码库 > 二分算法模板

二分算法模板

二分算法求最值,掌握了算法的本质和模板,主要就是答案验证过程,验证过程经常使用贪心算法。

关键是根据题目要求设立命题check(x)。

验证答案mid:
Check(mid):是否成立?
求满足条件Check(mid)的最小值:
–if  check(mid) then r:=mid else l:=mid+1;
求满足条件Check(mid)的最大值:
–if  check(mid) then l:=mid else r:=mid-1;

模板一:求满足条件check(mid)的最小值。

 1 //返回满足条件check(x)成立的最小的x. 2 function find1:longint; 3     var l,r,mid:longint; 4     begin 5       l:=1; r:=n; 6       while l<r do 7         begin 8           mid:=(l+r) div 2; 9           if check(mid) then r:=mid10           else l:=mid+1;11         end; //l=r12       exit(l);13     end;
View Code

 

模板二:求满足条件check(mid)的最大值。

 1 //返回满足条件check(x)成立的最大的x。 2  function find2:longint; 3     var l,r,mid:longint; 4     begin 5       l:=1; r:=n; 6       while l<r do 7         begin 8           mid:=(l+r+1) div 2; 9           if check(mid) then l:=mid10           else r:=mid-1;11         end; //l=r12       exit(l);13     end;
View Code