leetcode 题解#1
二分查找框架
left,right,mid
while(left<right)//搜索范围左闭右开,left==right时结束
{
mid=left+(right-left)/2; //(left+right)/2可能造成溢出
if(nums[mid]==target)right=...
else if(nums[mid]<target)left=...
else if(nums[mid]>target)right=...
}
解题思路
while(<)
:搜索范围左闭右开
nums[mid]==target
:缩小范围,若找左侧边界,使right=mid;若找右侧边界,使left=mid+1;
nums[mid]<target
:左闭(取mid+1,因为nums[mid]!=target
,mid
下标不在范围内)
nums[mid]>target
:右开(取mid,因为右区间是开区间,不要求nums[mid]==target
)
讨论
¿为什么,找左侧边界取mid,右侧范围取mid&#