この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - JavaScript コーディング問題
50. 重複要素のある配列で特定要素の直前の要素を返す

/**
 * @param {number[]} nums - sorted integer array with duplicates
 * @param {number} target - integer to search in the array
 * @return {number} - integer, the element just before the target or -1
 */
function findJustBefore(nums, target) {
  let left = 0;
  let right = nums.length - 1;

  while (left <= right) {
    const mid = Math.floor((left + right) / 2);

    if (nums[mid] === target) {
      // targetが見つかった場合、その直前の要素を返す
      return nums[mid - 1];
    } else if (nums[mid] < target) {
      // 中央値よりも小さい場合、左側を見る
      left = mid + 1;
    } else {
      // 中央値よりも大きい場合、右側を見る
      right = mid - 1;
    }
  }

  // 見つからなかった場合-1を返す
  return -1;
}

この関数では、二分探索を使用して配列を検索します。特定の数字が見つかった場合、その直前の要素を返します。そのため、配列に重複がないと仮定している通常の二分探索とは異なります。見つからなかった場合は-1を返します。