二分法的关键在于理解清楚边界的语义,然后逐步缩小边界范围。
public static int searchInsert(int[] nums, int target) {
int ret = 0; // 设置初始值为0,表示在插入第一个元素的时候,无法在while循环中退出,因此设为0
int l = 0;
int h = nums.length;
while (l < h)
{
int mid = l + (h-l) / 2;
if (nums[mid] == target)
return mid;
if (nums[mid] < target) // target 属于 (mid, h)中
{
l = mid + 1;
ret = mid + 1;
}
else // target 属于 [l, mid)中
{
h = mid;
}
}
return ret;
}