Find Trough/Peak Element
Find Peak Element (LC.162)
Example
Input: [1, 2, 3, 1]
Return: A[2] = 3, return 2
Input: [1, 2, 1, 3, 4, 5, 7, 6]
Return: A[1] = 2 or A[6] = 7, return 1 or 6Analysis
Code
public int findPeakElement(int[] nums) {
if (nums == null || nums.length == 0) {
return -1;
}
return peakHelper(nums, 0, nums.length - 1);
}
private int peakHelper(int[] nums, int start, int end) {
// base case 2 elements (make sure no array out of bound exception)
if (start + 1 >= end) {
if (nums[start] > nums[end]) {
return start;
} else {
return end;
}
}
// decrease
int mid = start + (end - start) / 2;
// conquer
if (nums[mid - 1] < nums[mid] && nums[mid] > nums[mid + 1]) {
// nums[mid] is a peak
return mid;
} else if (nums[mid - 1] < nums[mid] && nums[mid] < nums[mid + 1]) {
// in an increasing seq, search right
return peakHelper(nums, mid + 1, end);
} else if (nums[mid - 1] > nums[mid] && nums[mid] > nums[mid + 1]) {
// in a decreasing sq, search left
return peakHelper(nums, start, mid - 1);
} else {
// a trough, either left or right
return peakHelper(nums, start, mid - 1);
}
}Maximum Number in Mountain Sequence
Example
Analysis
Code
Find Peak Element II
Reference
Last updated