Skip to main content

Command Palette

Search for a command to run...

peek element

Published
1 min readView as Markdown
class Solution {
    public int findPeakElement(int[] nums) {
        int n = nums.length;
        int left = 0, right = n - 1;
        int ans = 0;  // default (there is always at least one peak)

        while (left <= right) {
            int mid = left + (right - left) / 2;

            long leftNeighbor = (mid > 0) ? nums[mid - 1] : Long.MIN_VALUE;
            long rightNeighbor = (mid < n - 1) ? nums[mid + 1] : Long.MIN_VALUE;

            if (nums[mid] > leftNeighbor && nums[mid] > rightNeighbor) {
                ans = mid;  // found peak
                break;      // we can break early as we found a valid peak
            }

            if (nums[mid] < rightNeighbor) {
                // slope going upwards → move right
                left = mid + 1;
            } else {
                // slope going downwards → move left
                right = mid - 1;
            }
        }

        return ans;
    }
}

More from this blog

Amit singh's blog

235 posts