简单 | 二分查找 |

一. 题目描述

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

二. 题目示例

:::tips 输入: nums = [1,3,5,6], target = 5
输出: 2
::: :::tips 输入: nums = [1,3,5,6], target = 2
输出: 1
::: :::tips 输入: nums = [1,3,5,6], target = 7
输出: 4
:::

三. 题目解答

1. 思路

数组有序,进行左闭右闭二分查找。

2. 代码

  1. /**
  2. * @param {number[]} nums
  3. * @param {number} target
  4. * @return {number}
  5. */
  6. var searchInsert = function(nums, target) {
  7. let left = 0;
  8. let right = nums.length-1;
  9. let mid = 0;
  10. while (left <= right){
  11. mid = Math.floor(left + (right-left)/2);
  12. if (nums[mid] == target){
  13. return mid;
  14. } else if (nums[mid] > target){
  15. right = mid-1;
  16. } else {
  17. left = mid+1;
  18. }
  19. }
  20. return left;
  21. };