classSolution{ publicintsearchInsert(int[] nums, int target){ if (nums.length == 0) return -1; int left = 0; //这里用right = nums.length,下面的while循环条件就用left < right //这里如果是right = nums.length - 1,下面的循环条件就是left <= right //这是因为使用right = nums.length循环判等的话会出现越界 int right = nums.length;
while (left < right) { int mid = left + (right - left) / 2; //防止left和right太大导致相加除二溢出 if (nums[mid] == target) { //如果target就是nums[mid]的值的话就直接返回 return mid; } if (target > nums[mid]) { //如果target比nums[mid]大,我们向右子区间收缩,所以这里需要left = mid + 1 left = mid + 1; } if (target < nums[mid]) { //因为我们上面的right = nums.length,并且循环条件为left < right //所以这里不能使用right = mid - 1,具体的大家可以debug观察结果 right = mid; } } return left; } }