返回

前端刷题路-Day72:搜索插入位置(题号35)精解

前端

引入
前端算法题是前端面试中常见的问题类型。搜索插入位置是其中一道经典题目。它要求你在一个排序数组中找到一个目标值,并返回它的索引。如果目标值不存在,则返回它将会被按顺序插入的位置。

算法实现

  1. 二分查找
    二分查找是一种高效的搜索算法,它通过不断将搜索范围缩小一半来找到目标元素。在 JavaScript 中,可以使用以下代码实现二分查找:

    function binarySearch(arr, target) {
      let left = 0;
      let right = arr.length - 1;
    
      while (left <= right) {
        const mid = Math.floor((left + right) / 2);
    
        if (arr[mid] === target) {
          return mid;
        } else if (arr[mid] < target) {
          left = mid + 1;
        } else {
          right = mid - 1;
        }
      }
    
      return -1;
    }
    
  2. 循环
    如果数组非常小,或者二分查找的开销太大,可以使用循环来找到目标元素。在 JavaScript 中,可以使用以下代码实现循环查找:

    function linearSearch(arr, target) {
      for (let i = 0; i < arr.length; i++) {
        if (arr[i] === target) {
          return i;
        }
      }
    
      return -1;
    }
    
  3. 边界情况
    在处理搜索插入位置问题时,需要考虑一些边界情况。例如,如果目标值小于数组中的最小值,则它应该被插入到数组的开头。如果目标值大于数组中的最大值,则它应该被插入到数组的末尾。

时间复杂度和空间复杂度

  • 二分查找的时间复杂度为 O(log n),其中 n 是数组的长度。
  • 循环查找的时间复杂度为 O(n),其中 n 是数组的长度。
  • 二分查找和循环查找的空间复杂度都是 O(1)。

总结
搜索插入位置是前端面试中常见的前端算法问题。可以使用二分查找或循环来找到目标元素。在处理搜索插入位置问题时,需要考虑一些边界情况。二分查找的时间复杂度为 O(log n),循环查找的时间复杂度为 O(n),二分查找和循环查找的空间复杂度都是 O(1)。