162. Find Peak Element
Intitution
A peak is an element that is greater than its immediate neighbors. Because we can assume nums[-1] and nums[n] are -∞, the array is guaranteed to have at least one peak.
To find a peak in O(log n) time, we can use binary search:
If
nums[mid]is greater than both neighbors → it's a peak.If the right neighbor is greater → the peak lies to the right.
Else → the peak lies to the left.
This works because in a unimodal-like structure, there's always a path toward a peak.
Complexity
Space Complexity
Time Complexity
Code
public int findPeakElement(int[] nums) {
    int left = 0, right = nums.length - 1;
    while (left <= right) {
        int mid = (left + right) >> 1;
        // Check if nums[mid] is greater than its left and right neighbors
        boolean isGreaterThanLeft = (mid - 1 < 0 || nums[mid] > nums[mid - 1]);
        boolean isGreaterThanRight = (mid + 1 >= nums.length || nums[mid] > nums[mid + 1]);
        // If both conditions hold, we found a peak
        if (isGreaterThanLeft && isGreaterThanRight) {
            return mid;
        }
        // If increasing toward the right, move right
        if (!isGreaterThanRight) {
            left = mid + 1;
        } else { // Else move left
            right = mid - 1;
        }
    }
    // Should never reach here if input is valid
    return -1;
}
Last updated