以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
50. 含有重复元素的数组中返回特定元素之前的元素

可以通过二分查找的方法解决这个问题。具体步骤如下:

  1. 初始化左指针 left 为 0,右指针 right 为数组长度减 1。
  2. 不断进行二分查找,直到找到第一个等于特定元素的位置,如果数组中不存在特定元素,则返回 undefined。在查找过程中需要保证找到的下标不会越界。

代码实现如下:

function findElementBefore(arr, target) {
  let left = 0,
    right = arr.length - 1;
  while (left <= right) {
    let mid = Math.floor((left + right) / 2);
    if (arr[mid] === target) {
      if (mid - 1 >= 0) {
        return arr.slice(0, mid);
      } else {
        return undefined;
      }
    } else if (arr[mid] < target) {
      left = mid + 1;
    } else {
      right = mid - 1;
    }
  }
  return undefined;
}

这个函数的时间复杂度为 $O(\log n)$,空间复杂度为 $O(1)$。其中 slice 方法创建了一个新数组,空间复杂度可以优化,不过这里为了代码的可读性,暂时不做优化。