二分法的技巧

总是在left和right赋值,赋middl-1还是middle纠结

while(left

这两种都是边界问题

 第一种:左闭右闭[left,right]

left = 0;
right = size - 1;
while (left <= right)//左闭右闭区间
{
    middle = (left + right) / 2;
    if (num[middle] > target)
    {
        right = middle - 1;//取middle-1
    }
    else if (num[middle] < target)
    {
        left = middle + 1;
    }
    else return middle;
}
return -1;

 第二种:左闭右开[left,right)

 left = 0;
right = size;
while (left < right)//左闭右开的区间
{
    middle = (left + right) / 2;
    if (nums[middle] > target)
    {
        right = middle;//取middle
    }
    else if (nums[middle] < target)
    {
        left = middle+1;//左闭,记得+1
    }
    else return middle;
}
return -1;

你可能感兴趣的:(分类,学习)