Solución
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