Solución

@loredovictor75_657e5d57·17/7/2026TypeScript
solution.tsTypeScript
function searchRotatedArray(nums: number[], target: number): number {
  const peakIdx = findPeakElement(nums);
  if (peakIdx === -1) {
    return binarySearch(nums, 0, nums.length - 1, target);
  }
  if (nums[peakIdx] === target) return peakIdx;
  if (target > nums[0]) {
    return binarySearch(nums, 0, peakIdx - 1, target);
  }
  return binarySearch(nums, peakIdx + 1, nums.length - 1, target);
}

function binarySearch(nums: number[], start: number, end: number, target: number): number {
  let mid;
  while (start <= end) {
    mid = Math.trunc((start + end) / 2);
    if (nums[mid] === target) return mid;
    if (nums[mid] > target) {
      end = mid - 1;
    } else {
      start = mid + 1;
    }
  }
  return -1;
}

function findPeakElement(nums: number[]): number {
  let start = 0;
  let end = nums.length - 1;
  while (start <= end) {
    let mid = Math.trunc((start + end) / 2);
    if (nums[mid] > nums[mid + 1]) return mid;
    if (nums[mid] < nums[mid - 1]) return mid - 1;
    if (nums[mid] <= nums[start]) {
      end = mid - 1;
    }
    if (nums[mid] > nums[end]) {
      start = mid + 1;
    }
  }
  return -1;
}

// No modificar: necesario para evaluar el resultado.
export { searchRotatedArray };
0respuestas
Respuestas

Aún no hay respuestas

¡Sé el primero en responder!

Escribir un comentario

Recuerda ser amable. Estás comentando la solución de otra persona. Comparte tu perspectiva de forma constructiva y respetuosa.

Debes iniciar sesión para publicar un comentario.