0278. First Bad Version

0035. Search Insert Position #

题目 #

  • 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。
  • 如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
  • 使用时间复杂度为 O(log n) 的算法。

思路 #

二分查找(左闭右开) #

  • 令右指针指向已知大于目标值的最靠前位置,左指针指向已知不大于目标值的最靠后位置
  • 当两指针相遇,所指向位置为元素的插入位置

代码 #

二分查找(左闭右开) #

class Solution {
    public int searchInsert(int[] nums, int target) {
        int left = 0, right = nums.length;
        while (left < right) {
            int medium = left + (right - left) / 2;
            if (nums[medium] == target) return medium;
            else if (nums[medium] > target) right = medium;
            else left = medium + 1;
        }
        return right;
    }
}