搜索插入位置(35)

61 阅读1分钟

题目描述:

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

思路分析:由于要求时间复杂度为 O(log n),因此可以考虑使用二分查找算法。在二分查找的过程中,需要注意以下两点:

  • 如果目标值在数组中存在,则返回其索引;
  • 如果目标值在数组中不存在,则返回应该插入的位置。

实现代码:

const getTargetIndex = function (nums, target) {
  let len = nums.length;
  let left = 0,
    right = len - 1;
  while (left <= right) {
    let mid = Math.floor((right + left) / 2);
    if (nums[mid] === target) {
      return mid;
    } else if (nums[mid] < target) {
      left = mid + 1;
    } else {
      right = mid - 1;
    }
  }
  return left;
};