peek element
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;
}
}