题目

类型:二分搜索
难度:简单
image.png

解题思路

这道题就是考察搜索左侧边界的二分算法的细节理解
当目标元素 target 不存在数组 nums 中时,搜索左侧边界的二分搜索的返回值可以做以下几种解读
1、返回的这个值是 nums 中大于等于 target 的最小元素索引。
2、返回的这个值是 target 应该插入在 nums 中的索引位置。
3、返回的这个值是 nums 中小于 target 的元素个数。
比如在有序数组 nums = [2,3,5,7] 中搜索 target = 4,搜索左边界的二分算法会返回 2,你带入上面的说法,都是对的。
所以以上三种解读都是等价的,可以根据具体题目场景灵活运用,显然这里我们需要的是第二种。

代码

  1. class Solution {
  2. public int searchInsert(int[] nums, int target) {
  3. return leftBound(nums, target);
  4. }
  5. int leftBound(int[] nums, int target) {
  6. if (nums.length == 0) return -1;
  7. int left = 0;
  8. int right = nums.length;
  9. while (left < right) {
  10. int mid = left + (right - left) / 2;
  11. if (nums[mid] == target) {
  12. right = mid;
  13. } else if (nums[mid] < target) {
  14. left = mid + 1;
  15. } else if (nums[mid] > target) {
  16. right = mid;
  17. }
  18. }
  19. return left;
  20. }
  21. }