二分模板
想象l,区间所有的数都满足条件
求满足条件的最大值:如果l, r 范围的数都满足条件,那势必要取中时加一,即偶数时候取下一位,那就确定了查找范围是在【l,mid-1】,【mid,r】;要区分出最右端,势必要判断右边的不合法情况:
while(l<r){ int mid=l+r+1 >>1; if(mid>traget) r=mid-1; else l=mid; }
求满足条件的最小值:如果l, r 范围的数都满足条件,那势必要取中,即偶数时候取前一位,那就确定了查找范围是在【l,mid】,【mid+1,r】;要区分出最左端,势必要判断左边的不合法情况:
while(l<r){ int mid=l+r >>1; if(mid<traget) l=mid+1; else r=mid; }

浙公网安备 33010602011771号