Solución

@loredovictor75_657e5d57·21/7/2026TypeScript
solution.tsTypeScript
public class Solution {
    public int searchRotatedArray(int[] nums, int target) {
        int peak = findPeak(nums);
        if (peak == -1)
            return binarySearch(nums, 0, nums.length - 1, target);
        if (nums[peak] == target)
            return peak;
        if (target < nums[0])
            return binarySearch(nums, peak + 1, nums.length - 1, target);
        return binarySearch(nums, 0, peak - 1, target);
    }

    public int binarySearch(int[] nums, int start, int end, int target) {
        while (start <= end) {
            int mid = (start + end) / 2;
            if (nums[mid] == target)
                return mid;
            if (nums[mid] > target) {
                end = mid - 1;
            } else {
                start = mid + 1;
            }
        }
        return -1;
    }

    public int findPeak(int[] nums) {
        if (nums.length == 1)
            return 0;
        int start = 0;
        int end = nums.length - 1;
        while (start <= end) {
            int mid = (start + end) / 2;
            if (mid < nums.length && nums[mid] > nums[mid + 1])
                return mid;
            if (mid > 0 && nums[mid] < nums[mid - 1])
                return mid - 1;
            if (nums[mid] <= nums[start]) {
                end = mid - 1;
            } else {
                start = mid + 1;
            }
        }
        return -1;
    }
}
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.